dup2
現在、と C パイプの組み合わせを理解しようとしていますが、最も単純なプログラムでさえ機能しないようです。サンプルコードを読んでいると、パイプの端をいつ閉じるか、出力をどこに出力するかについて、かなり混乱しています。
パイプに入る必要がある1行後の出力を生成する必要がある場合でも、書き込み終了が閉じられることがあります。他の例では、未使用の端が閉じられています (これは私にとってより理にかなっています)。
それでは、いつ実行すればよいのかわかりませんdup2
。リダイレクトしたい出力の前になるはずなのですが、今日はそれも違って見えた気がします。
printf
そのため、最終的に、パイプを介して何もリダイレクトされない、fflush
各行でのこの小さなテストを思いつきました。なぜですか?私は何を間違っていますか?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int out_pipe[2];
char *output[101];
if (pipe(out_pipe) != 0) {
perror("pipe()");
exit(1);
}
printf("Hello");
fflush(stdout);
dup2(out_pipe[1], STDOUT_FILENO);
printf("Hello");
fflush(stdout);
close(out_pipe[1]);
printf("Hello");
fflush(stdout);
read(out_pipe[0], output, 100);
close(out_pipe[0]);
printf("PIPE: %s", output);
fflush(stdout);
return 0;
}