用fork()往文件里写数据问题
有这样一个程序:
#include <stdio.h>
main()
{
FILE *fp;
int pid;
char msg1[]= "Test 1 2 3..\n ";
char msg2[]= "Hello,hello ";
if((fp=fopen( "testfile ", "w "))==NULL)
return 0;
fprintf(fp, "%s ",msg1);
if((pid=fork())==-1)
return 0;
fprintf(fp, "%s ",msg2);
fclose(fp);
return 1;
}
对文件testfile中的输出结果有点不理解,
结果是:Test 1 2 3..
Hello,hello
Test 1 2 3..
Hello,hello
?
------解决方案--------------------fork成功后,子进程是父进程的一个完美的复制品,包括文件缓冲区,所以fprintf(fp, "%s ",msg1);只执行了一次,但是在fclose(fp);时两个进程的文件缓冲区都写到文件里了。
------解决方案--------------------fork之前调用:
setbuf(fp, 0);
就不会有问题了