0

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;
}
4

1 に答える 1