当前位置: 技术问答>linux和unix
用fork()往文件里写数据问题
来源: 互联网 发布时间:2016-01-28
本文导语: 有这样一个程序: #include 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,"...
有这样一个程序:
#include
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
?
#include
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);
就不会有问题了
setbuf(fp, 0);
就不会有问题了