им в настоящее время, реализующий оболочки в С. Моя проблема возникает, когда я пытаюсь запустить такую команду:реализации оболочки в C
SHELL$: sort < txtFile | grep key
им работает sort < txtFile
в процессе (ребенок), и в родительский то есть else if(pid > 0)
им управляет другая команда справа от трубы.
Программа работает нормально, но она выходит из бесконечного цикла, который я создал в основном, чтобы получать вход от пользователя.
Как я могу решить эту проблему?
это код, я до сих пор иметь дело с трубой, я не включаю в себя код, который я должен иметь дело с редиректами:
c2p является установкой трубы я для этого.
if(pid == 0)
{
if(PIPE_FLAG)
{
close(c2p[0]);
if(dup2(c2p[1], STDOUT_FILENO) == -1){
perror("dup2() failed");
exit(2);
}
}
/* Execute command */
execvp(cmd_args[0], cmd_args);
perror("exec failed 1. "); /* return only when exec fails */
exit(-1);
}
else if(pid > 0)
{
if(PIPE_FLAG)
{
close(c2p[1]);
if(dup2(c2p[0], STDIN_FILENO) == -1){
perror("dup2() failed");
exit(-1);
}
execvp(nxt_args[0], nxt_args);
perror("exec failed 2. ");
exit(-1);
}
}
else
{
/* error occurred */
perror("fork failed");
exit(1);
}
@KerrekSB благодарит за ваш отзыв, но я пытаюсь выяснить, что происходит с моим кодом. Большое спасибо за ответ, хотя – Hous3aholik
Вы вызываете 'exec' как в родительском, так и в дочернем процессе, поэтому сама оболочка больше не существует. – chepner