pid = fork();
if (pid == 0) val += 3;
if (val == 5) val++;
printf(“val=%d\n”, val);
ケース 1: の後fork()
、親が子より前にスケジュールされ、printf()
呼び出しが正常に完了する
val = 6; //printed by parent
val = 8; //printed by child
ケース 2: の後fork()
、親が子より前にスケジュールされ、正常に printf() 呼び出しが完了する
val = 8; //printed by child
val = 6; //printed by parent
printf()
--との問題fork()
--
#include<stdio.h>
#include <sys/types.h>
int main()
{
printf("Before forking");
pid_t pid = fork();
if (pid == 0)
printf("child printing");
else
printf("parent printing");
}
出力は
term# ./a.out
Before forkingparent printingBefore forkingchild printing
上記の問題は、ステートメント「Before forking」が 2 回出力されることは明らかです。
解決策は
, を使用して、呼び出し'\n'
ごとに各行をバッファリングしprintf()
ます。
ここで適切にアドバイスされているようfflush(0)
に、 fork する前にすべての I/O バッファを空にするために を呼び出します。