我正在编写一些涉及使用管道的 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"
。