Я реализую канал на C. Когда я пытаюсь выполнить команду cat aa | grep "something" 'в моей программе. Просто зависший процесс grep, кажется, ждет ввода. Не знаю почему. Вот основной код. Просто возьмите ExecuteCommand как просто вызовите функцию execve, и все аргументы будут переданы правильно.
if ((pid = fork()) < 0)
{
perror("fork failed\n");
exit(1);
}
if (pid)
{ // parent as pipe WRITER
close(pd[0]);
close(1);
// replace input with pipe
dup(pd[1]);
// recursively call next commands
ExecuteCommand(cmds, env);
FreeCommandsArray(&cmds);
exit(0);
}
else
{ // child as pipe READER
close(pd[1]);
close(0); // close its READ end
dup(pd[0]);
ExecuteCommand(*(++splitCmds), env);
FreeCommandsArray(&cmds);
exit(0);
}
Открыт полный код. Другая проблема заключается в том, что я должен использовать полный путь к командному файлу в качестве первого параметра для execve (например, / bin / ls для ls), в противном случае я получил сообщение об ошибке, такого файла не существовало.
exit()
в родительском процессе? У вас есть ещеfork()
звонок, который вы не показываете? - person Some programmer dude   schedule 21.09.2015