LINUX.ORG.RU

fork ,exec и pipe


0

0

Имеется такой код

int main()

{

.......

.......

.......

while(1)

{

sleep(5);

pid =fork();

if (pid <0)

{

fprintf(stderr, "Fork failed\n");

return -1; }

if (pid == 0)

{

close(Pipes[0]);

dup2(Pipes[1],1);

close(Pipes[1]);

execvp(first_com[0], first_com);

fprintf(stderr,"couldn't execute:%s\n",first_com[0]); perror("execvp");

return -1;

}

else

{

close(Pipes[1]);

dup2(Pipes[0],0);

close(Pipes[0]);

execvp(sec_com[0], sec_com);

fprintf(stderr,"couldn't execute: %s\n", sec_com[0]);

perror("execvp");

return -1;

}

}/* end while */

..............

..............

exit(0);

} /* end main */

Это схема такой команды >$ cat /etc/passwd | wc -l

всё работает нормально только нет бесконечного цикла програма

печатает кол-во строк в файле и заверщается

Почему так происходит и как сделать что бы это работало

в цикле?

anonymous
Ответ на: комментарий от generatorglukoff

Я понимаю что если execvp отработал нормально то она не возвращается. А какой правильный подход ?

anonymous
()
Ответ на: комментарий от anonymous

>А какой правильный подход ?

подход к чему? если нужно сделать cat somefile | wc -l в бесконечном, то, имхо, нужно сделать два раза fork в главном процессе.

generatorglukoff ★★
()
Ответ на: комментарий от anonymous

> с фига ли два fork()? родительский процесс крутит while, а дочерний делают execvp

ну он же хочет сделать пайп cmd1 | cmd2

значит должно быть три процесса -- тот который крутит цикл, который экзекает cmd1 и тот который экзекает cmd2

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.