#shell #pipe #fork #execvp #dup
#оболочка #канал #fork #execvp #дублирование
Вопрос:
Я выполняю команды в своей микросхеме. Отдельные команды, похоже, работают нормально, но при предоставлении таких команд канала, как ls || sort
, он не выдает вывод немедленно. Когда я выхожу из программы, вывод всех команд канала печатается. Я не уверен, как это исправить. Ниже приведен мой код для команд канала.
pid = fork(); /* Creating child */
if(pid==0) /*Inside child */
{
dup2(fd[1],STDOUT_FILENO); /* Redirecting the stdout to the pipe using the dup2 */
close(fd[0]); /*Closing the read descriptor of pipe */
execvp(commandExecute1[0],commandExecute1); /* Execute the first command */
}
else
{
/*Inside Parent */
if((pid=fork())==0) /*second child */
{
dup2(fd[0],STDIN_FILENO); /* Redirecting standard input to the read descriptor of pipe */
dup2(STDOUT_FILENO,fd[1]); /* Redirecting the pipe descriptor o/p to STDOUT */
close(fd[1]); /*Close write file descriptor of pipe */
execvp(commandExecute2[0],commandExecute2); /* Running the second command*/
}
}
Я что-нибудь пропустил?
Комментарии:
1. кто-нибудь может мне помочь в этом.
2. Для одного дочернего элемента вы переходите от дочернего элемента к родительскому.
child | parent
При двойном дочернем элементе вы должны передавать данные от дочернего элемента к дочернему элементу и от дочернего элемента к родительскому.child | child | parent
Однако вы не можете использовать одну пару каналов. Вы должны использовать 2 пары каналов.3. Попробует, что alvits
4. Сейчас я получаю вывод, но весь второй процесс запускает весь вывод
5. Скорее всего, вы неправильно подключили каналы. Первая пара каналов находится строго между 2 дочерними элементами. Вторая пара каналов находится строго между 2-м дочерним и родительским процессами. Затем родительский элемент может считывать данные со стороны чтения канала.