免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: balabalacha
打印 上一主题 下一主题

<<APUE>>--Exercises 3.2 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-20 09:58 |只看该作者
另外,我还想到:
以7楼的代码为例(我的是错的*^_^*),假设运气好,在这儿成功

  1. assert(fd == newfd); /* reasonable */
  2.                 return fd;
复制代码

而在此之前还经过了N次递归过程,现在由于分到了newfd,程序开始回归,假设回归过程时,另一个进程也使用了dup2来分配newfd,那会造成第一个进程分的newfd被释放(有可能,假设oldd!=newfd),但第一个进程并不知情,仍在回归,直到返回到调用进程,此时调用进程就会出问题

我说的对吗?

论坛徽章:
0
12 [报告]
发表于 2006-05-20 10:15 |只看该作者
原帖由 balabalacha 于 2006-5-20 09:58 发表
另外,我还想到:
以7楼的代码为例(我的是错的*^_^*),假设运气好,在这儿成功

  1. assert(fd == newfd); /* reasonable */
  2.                 return fd;
复制代码

而在此之前还经过了N次递归过程,现在由 ...


每个进程都有自己独立的文件描述符空间,互不影响。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
13 [报告]
发表于 2006-05-20 10:18 |只看该作者
就像num 1 文件符,你dup标准输出之后在自己的进程里关闭它,并不影响其他进程如父层的shell继续输出。

论坛徽章:
0
14 [报告]
发表于 2006-05-20 10:59 |只看该作者
真要命,赶紧弄懂

every process has an entry in the process table
在process table内的process table entry都有一个只属于自己的在自己进程打开的file descriptors的表,不管对这个表内的fd如何,并不影响process table中的其它的process table entry

是这样吗

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
15 [报告]
发表于 2006-05-20 11:07 |只看该作者
看这个逻辑

fork()  --->  fdinit()  ---> newfd = malloc(......)  --->  初始化一些东西。

可以看出来每个进程自己分配的有空间存放这些东西。

当然描述符表还有这两个操作,fdcopy()/fdshare(),分别对应拷贝,共享,上面那个比较简单,意思是关闭fd,fd table清0。

论坛徽章:
0
16 [报告]
发表于 2006-05-20 11:46 |只看该作者
原帖由 gvim 于 2006-5-20 11:07 发表
看这个逻辑

fork()  --->  fdinit()  ---> newfd = malloc(......)  --->  初始化一些东西。

可以看出来每个进程自己分配的有空间存放这些东西。

当然描述符表还有这两个操作,fdcopy()/fdshar ...



还没学到那呢,现在正在看第4章,谢谢各位的指导

论坛徽章:
0
17 [报告]
发表于 2006-05-20 12:37 |只看该作者
原帖由 balabalacha 于 2006-5-20 11:46 发表
还没学到那呢,现在正在看第4章,谢谢各位的指导


结合《FreeBSD操作系统设计与实现》一起看。

论坛徽章:
0
18 [报告]
发表于 2006-05-20 14:09 |只看该作者
哦!我找找)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP