LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 776|回复: 3

关于进程顺序的问题

[复制链接]
发表于 2006-9-12 23:55:58 | 显示全部楼层 |阅读模式
大家先看看一个简短的例程:

  1. /*   定义加一些初试化工作   */
  2. fp=open(……);
  3. pid=fork();
  4. if(pid==0)
  5. {
  6.     /*child done*/
  7. }
  8. else
  9. {
  10.    pr=wait(NULL);
  11.    /* parent done*/
  12. }

  13. close(fp);
  14. exit(0);
复制代码


问题在于,我使用了wait,堵塞了父进程,也就是说,子进程已经执行完毕,到达exit。
也意味着执行了close(fp); 由于对于fork()的定义是,建立子进程,共享了一个文件,既然子进程先行,且关闭了文件,那么父进程就应该不能对这个文件进行写了。
好了,问题出现,我执行时 父进程依然可以对文件进行读写。
不解啊,请高手们帮帮我理解,谢谢,不胜感激!
发表于 2006-9-13 00:19:39 | 显示全部楼层
Post by 42899942

既然子进程先行,且关闭了文件,那么父进程就应该不能对这个文件进行写了。

何处得知?.
回复 支持 反对

使用道具 举报

发表于 2006-9-13 10:10:31 | 显示全部楼层
父子进程各自有一个打开的文件句柄,子进程只是关闭了自己的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-13 13:42:42 | 显示全部楼层
《APUE》  P146
有一句:如果使用exit而不是_exit,父进程printf的输入消失,其原因是子进程调用exit,它刷新关闭了所有标准IO流,虽然由子进程执行,但却是在父进程的地址空间中进行,所以多有受到影响的标准IO,FILE对象都在父进程中的。当父进程调用printf时,标准输出已经被关闭,printf将输出-1……
所以 不是很理解。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表