linux pipeでコードを書いていて、理解できません。なぜprintfs(1)かexec(2)だけが親プロセスの入力に行くのですか?私がexecにコメントすると、printfはうまく動作します。コメントを解除する場合、唯一の "LS" Execがコメントしたときに出力がLinuxパイプとexecのstdoutが一緒に動作しないのはなぜですか?
int main(void)
{
int fd[2], pid;
if (pipe(fd) != 0) return 1;
if ((pid = fork()) == -1) return 1;
if (pid == 0) // child
{
close(STDOUT_FILENO);
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
close(fd[1]); // */
printf("hello\n"); // (1)
printf("hello2\n");
// execl("/bin/ls", "ls", NULL); // (2)
printf("exec not executed\n");
}
else
{
close(STDIN_FILENO);
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
close(fd[1]);
char buf[100];
while(gets(buf) != NULL)
printf("message: %s\n", buf);
}
}
出力を示す:
メッセージ:こんにちは
メッセージ:hello2
メッセージ:
を実行しないExecのexecはコメントしていません:
はメッセージ:FILT1
メッセージ:filt1.d
....その他のファイルは
メッセージ:メイク
メッセージ:デフォルトではobjects.mk
ケースごとにプログラムの正確な出力を表示してください。 「親プロセスの入力にはexec(2)だけが行く」という意味は明確ではありません。 – kaylum