2
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
int main()
{
   printf("abcd");
   fork ();
   printf("pqrs\n");
   return 0;
}

このプログラムは、次のような出力を提供します。

abcdpqrs
abcdpqrs

しかし、それはどのように可能ですか?そうではありませんか:

abcdpqrs
pqrs
4

2 に答える 2

4

いいえ

これは、fork が printf で使用されるデータ構造もコピーし、出力するバッファを保持しているためです。

プログラムを fork すると、バッファはフラッシュされません。

于 2013-02-17T15:48:51.347 に答える
3

printf必ずしもstdoutすぐにフラッシュするとは限らないため、次の出力が実行されるまで「abcd」がバッファリングされます。後でフォークの両方の「側面」が出力を行うため、両方とも「abcd」をフラッシュします。

おそらく予想どおりに機能させるには、手動でフラッシュしてみてください。

int main()
{

   printf("abcd");
   fflush(stdout);
   fork ();
   printf("pqrs\n");
   return 0;
}

$ ./a.out 
abcdpqrs
pqrs
于 2013-02-17T15:50:06.010 に答える