fork()复制进程的问题。

wingyip 2009-08-07 10:09:06
我的问题:为什么下面的程序输出文件内容是
Test 1 2 3 ..
Hello, hello
Test 1 2 3 ..
Hello, hello

"Test 1 2 3.." 不是在fork()调用之前的已经输入到文件了吗,为什么会出现两次的?

程序如下:
#include<stdio.h>
int main()
{
FILE *fp;
int pid;
char msg1[]="Test 1 2 3 ..\n";
char msg2[]="Hello, hello\n";
if((fp=fopen("testfile2","w"))==NULL)
return 0;
fprintf(fp,"%s",msg1);
if((pid=fork())==-1)
return 0;
fprintf(fp,"%s",msg2);
fclose(fp);
return 1;
}
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingyip 2009-08-07
  • 打赏
  • 举报
回复
谢谢!
晨星 2009-08-07
  • 打赏
  • 举报
回复
fprintf可能是基于fwrite的。
至于fwrite眼write的区别,楼主可以查查资料,或者看看这个:
http://blog.chinaunix.net/u2/88515/showart_1721586.html
晨星 2009-08-07
  • 打赏
  • 举报
回复
那只能说明fprintf跟write底层的缓冲机制可能不同呗。:(
wingyip 2009-08-07
  • 打赏
  • 举报
回复
加了fflush(fp);就ok了

但为什么下面的程序不加也不会出现输出 msg1 的?
程序:

int main()
{
int fd;
int pid;
char msg1[]="Test 1 2 3 ..\n";
char msg2[]="Hello, hello\n";

if((fd=creat("tesefile",0644))==-1)
return 0;
if(write(fd,msg1,strlen(msg1))==-1)
return 0;

if((pid=fork())==-1)
return 0;
if(write(fd,msg2,strlen(msg2))==-1)
return 0;
close(fd);
return 1;
}
晨星 2009-08-07
  • 打赏
  • 举报
回复
应该是跟文件缓冲有关。
你在第一次fprintf之后加上一句“fflush(fp);”就好了。

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧