сбой статистики: -: неверный дескриптор файла

Я реализую оболочку, трубу и вилку. Я в основном передаю сообщения между двумя дочерними процессами одного и того же родителя. Отдельная команда работает, но конвейерные команды не работают. Я получаю ошибки, такие как плохие файловые дескрипторы. Кто-нибудь может мне с этим помочь ?

Ниже мой код.

/ * Форкинг родителя * /

if ((pid = fork()) <0)

cout<<"fork error";

/ * Если это ребенок * /

else if (pid == 0)
{

/* child */

if(pipe(pipeA)==-1)

cerr<<"Pipe Creation error"<<'\n';

/* Duplicating the output */

dup2(pipeA[1],1);

close(pipeA[0]);

/* Running the first command  */

if(execvp(*command1,command1)<0)

{

cout<<"error in executing:"<< command<<'\n';

}

}

/ * В родительском ожидании, пока ребенок не завершит * /

if ( (pid = waitpid(pid, &status, 0)) < 0)

cout<<"waitpid error";

/* calling method, to create second process and execute it  */

secondExecute(command2);

}

// Second process will be created here

void secondExecute(char *command2)

{

if ((pid = fork()) <0)

cout<<"fork error";

else if (pid == 0)

{

dup2(pipeA[0],0);

close(pipeA[1]);/* Executing the second process */

if(execvp(*args,args)<0)

{

cout<<"couldn't execute:"<< command2<<'\n';

}

}

if ( (pid = waitpid(pid, &status, 0)) < 0)

cout<<"waitpid error";

}

-2

Решение

Вы должны создать трубу, прежде чем позвонить fork, Если родитель и ребенок каждый pipe Сами они будут создавать разные трубы. Вам нужен общий канал между двумя процессами.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector