2017-04-11 9 views
4

パイプを作成し、パイプに数値を書き込み、パイプから数値を読み込んで、stdoutに出力するプログラムを作成しました。しかし、fscanfは空のパイプストリームを参照しているようですが、私はfflushを作成しました。なぜfprintfとfscanfがパイプで動作しないのですか

なぜfprintfが何も印刷しないのですか?

int main() { 
    int fd[2]; 
    pipe(fd); 

    FILE* write_file = fdopen(fd[1], "w"); 
    FILE* read_file = fdopen(fd[0], "r"); 
    int x = 0; 
    fprintf(write_file, "%d", 100); 
    fflush(write_file); 
    fscanf(read_file, "%d", &x); 

    printf("%d\n", x); 
} 

答えて

4

あなただけではなく、パイプの近い書き終わりに持って、それをフラッシュします。 (桁以上)を読み取るためのデータがまだある場合はそれ以外の場合fscanf()は、知らない:

fprintf(write_file, "%d", 100); 
fclose(write_file); 
fscanf(read_file, "%d", &x); 

また、複数の数字を探してfscanf()停止を行うことが数字の後に空白を記述します。

fprintf(write_file, "%d ", 100); 
fflush(write_file); 
fscanf(read_file, "%d", &x); 

これで問題が解決するはずです。次の文字がでてくるまで

+0

誰がこれを落としたのですか? –

+0

@Ctxこれが助けになりました!ありがとう:) –

1

fscanf(read_file,"%d")は、すなわち限り何のホワイトスペース、非数字などの文字が読み込まれていないとして、限り、それはパターン"%d"に一致するものを検索してストリームからfscanf「待機」を読み出す。

したがって、fprintf(write_file, "%d\n", 100);は、次のfscanfも終了するようにパイプに書き込まれた番号を「終了」するため、この問題を解決します。

関連する問題