パイプを使用する 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"
.