1
一個實現方式是:困惑管道實現
#define STD_INPUT 0
#define STD_OUTPUT 1
pipeline(char *process1, char *process2)
{
int fd[2];
pipe(&fd[0]);
if (fork() != 0) {
/* The parent process executes these statements. */
close(fd[0]);
close(STD_OUTPUT);
dup(fd[1]);
close(fd[1]); /* this file descriptor not needed anymore */
execl(process1, process1, 0);
}
else {
/* The child process executes these statements. */
close(fd[1]);
close(STD_INPUT);
dup(fd[0]);
close(fd[0]); /* this file descriptor not needed anymore */
execl(process2, process2, 0);
}
}
我利用這一個接着一個DUP電話,分別爲兩個語句的混淆。
close(fd[1]); /* this file descriptor not needed anymore */
和
close(fd[0]); /* this file descriptor not needed anymore */
我告訴描述不再是必要的,但對我來說這些描述符代表管道的兩端,那麼,爲什麼他們不再需要?
我的歉意,這個問題很模糊,我已經更新了。 我瞭解dup之前關閉的第一次使用,但不理解dup之後的第二次關閉。 – richard
@richard:答案更新。 – jxh
@richard:你不需要文件描述符的兩個副本,是嗎?一旦你複製它,你不需要原來的。 –