我在寫一些涉及使用管道的C代碼。爲了讓孩子過程中使用我的管道,而不是STDOUT輸出,我用下面幾行:C關閉STDOUT永遠運行
close(STDOUT);
dup2(leftup[1], STDOUT);
但是,它似乎進入某種無限循環的或掛在這些線路。當我擺脫close
時,它掛在dup2
。
奇怪的是,同樣的想法在緊接線適用於STDIN:
close(STDIN);
dup2(leftdown[0], STDIN);
什麼引起這種行爲?
編輯:只是要清楚......
#define STDIN 0
#define STDOUT 1
編輯2:這裏是一個精簡的例子:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#define STDIN 0
#define STDOUT 1
main(){
pid_t child1 = 0;
int leftdown[2];
if (pipe(leftdown) != 0)
printf("ERROR");
int leftup[2];
if (pipe(leftup) != 0)
printf("ERROR");
printf("MADE PIPES");
child1 = fork();
if (child1 == 0){
close(STDOUT);
printf("TEST 1");
dup2(leftup[1], STDOUT);
printf("TEST 2");
exit(0);
}
return(0);
}
的"TEST 1"
線從未達到。唯一的輸出是"MADE PIPES"
。
爲了更加清晰:已經有'STDIN_FILENO'等人。不要重新發明輪子。 – 2013-02-10 06:27:45