免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2391 | 回复: 10
打印 上一主题 下一主题

问一个关于内核file结构的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 15:33 |只看该作者 |倒序浏览
当fork一个自进程的时候内核会给子进程也创建一个file结构体还是只是给file结构的计数加1.如果只是加一的话,那如果父进程和子进程都想对文件进行读写,那指针问题怎么解决呢?大家注意一下,是小写的file 不是用户态那个FILE文件流指针。 谢谢

[ 本帖最后由 wangqi0021 于 2008-4-1 15:41 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-01 15:39 |只看该作者
如果是多进程,子进程会有自己的file结构。

如果是多线程,多线程之间会共享file结构。这种情况只能靠加锁来避免竞争。

论坛徽章:
0
3 [报告]
发表于 2008-04-01 15:44 |只看该作者
原帖由 LF_532 于 2008-4-1 15:39 发表
如果是多进程,子进程会有自己的file结构。

如果是多线程,多线程之间会共享file结构。这种情况只能靠加锁来避免竞争。

但是今天有个人讲 说只会给file的count成员加1 ,所以让我有点怀疑。

论坛徽章:
0
4 [报告]
发表于 2008-04-01 15:52 |只看该作者

回复 #3 wangqi0021 的帖子

那是在多线程的情况下,共享同一个file结构,所以count加1。便于所有线程都解除对该file结构引用时,释放该结构。

论坛徽章:
0
5 [报告]
发表于 2008-04-01 15:54 |只看该作者
原帖由 LF_532 于 2008-4-1 15:52 发表
那是在多线程的情况下,共享同一个file结构,所以count加1。便于所有线程都解除对该file结构引用时,释放该结构。


OK了  多谢

论坛徽章:
0
6 [报告]
发表于 2008-04-01 15:55 |只看该作者
每次调用close时,内核会检查file结构count的值,如果为0,就会释放掉该结构。

论坛徽章:
0
7 [报告]
发表于 2008-04-01 15:55 |只看该作者
fork的时候引用数加一

论坛徽章:
0
8 [报告]
发表于 2008-04-01 16:06 |只看该作者
就是说在fork的时候,内核会给子进程单独创建一个file结构,让父进程的f_count成员加1。 我这么理解对么?

论坛徽章:
0
9 [报告]
发表于 2008-04-01 16:11 |只看该作者
原帖由 wangqi0021 于 2008-4-1 16:06 发表
就是说在fork的时候,内核会给子进程单独创建一个file结构,让父进程的f_count成员加1。 我这么理解对么?


父子进程共享file结构,仅仅引用数+1

看《APUE》第二版 P175 图8-1

论坛徽章:
0
10 [报告]
发表于 2008-04-01 16:13 |只看该作者
不好意思,是我看错了。我看成是file_struct结构了。

刚看了一下内核代码,确实是将file结构的f_count加1

[ 本帖最后由 LF_532 于 2008-4-1 16:16 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP