Трубы, dup2 и exec ()
Я должен написать оболочку, которая может запускать трубы. Например, такие команды, какls -l | wc -l
Msgstr "Я успешно проанализировал команду, заданную пользователем, как показано ниже:
"ls" = firstcmd
"-l" = frsarg
"wc" = scmd
"-l" = secarg
Теперь я должен использовать две вилки, так как команды - две и труба. Блок кода, который я написал для выполнения команды, выглядит следующим образом:
pid_t pid;
int fd[2];
pipe(fd);
pid = fork();
if(pid==0)
{
dup2(fd[WRITE_END], STDOUT_FILENO);
close(fd[READ_END]);
execlp(firstcmd, firstcmd, frsarg, (char*) NULL);
}
else
{
pid=fork();
if(pid==0)
{
dup2(fd[READ_END], STDIN_FILENO);
close(fd[WRITE_END]);
execlp(scmd, scmd, secarg, (char*) NULL);
}
}
Поэтому, когда я запускаю свою оболочку, и я ввожу командуls -l | wc -l
(например) результат от execs не отображается, но оболочка продолжает работать нормально.
Странно то, что результат команды отображается только тогда, когда я завершаю свою оболочку с помощью «exit» или «^ C».
Что не так с этим выводом? Почему он не появляется сразу после ввода команды?