有人可以請解釋使用dup2之後檢查fd [0]!= STDIN_FILENO,因爲從我瞭解fd [0]!= STDIN_FILENO將失敗,dup2仍然會返回除STDIN_FILENO以外的東西,只是試圖瞭解一些示例代碼,謝謝,如果有人可以解釋爲什麼使用excelp這將是一個很大的問題。dup2後fd [0]!= STDIN_FILENO
int fd[2];
pid_t pid;
if(argc != 2) {
fprintf(stderr, "Must be specify exactly 1 file\n");
exit(0);
}
if(pipe(fd) < 0)
exit(1);./
pid = fork();
switch (pid) {
case -1:
exit(1);
case 0:
close(fd[1]);
//here
if(fd[0] != STDIN_FILENO) {
if(dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
exit(3);
close(fd[0]);
}
if(execlp("tr", "tr", "[a-z]", "[A-Z]", (char *) 0) < 0)
exit(4);
break;
default:
close(fd[0]);
// and here
if(fd[1] != STDIN_FILENO) {
if(dup2(fd[1], STDIN_FILENO) != STDIN_FILENO)
exit(5);
close(fd[1]);
}
if(execlp("cat", "cat", argv[1], (char *) 0) < 0)
exit(4);
break;
}
return 0;
有沒有人理解爲什麼代碼使用* unidirectional *管道的* write * end作爲* stdin *?此代碼看起來不正確。 – thejh 2013-03-28 09:15:30
謝謝大家!!!!! – cincybengal 2013-03-28 09:24:00
@thejh是的,默認(父母)的情況是錯誤的...那些應該是STDOUT_FILENO – 2013-03-28 09:24:03