socketpair会创建两个描述符,但改描述符不属于任何的实际文件系统,而是网络文件系统,虚拟的.同时内核会将这两个描述符彼此设为自己的peer即对端(这里即解决了如何标识读写端,可以想象,两个描述符互为读写缓冲区,即解决了这个问题).然后应用相应socket家族里的read/write函数执行读写操作.
有了这个基础,即可明白为什么试用fork产生的两个子进程都不关闭读端的时候会竞争,如上所述,他们共享相同的文件表项,有相同的inode和偏移量,两个进程的操作当然是相互影响的.
本文出自 “流离and逍遥” 博客,请务必保留此出处
liang1998
1人
了这篇文章类别:linux C/C++┆阅读(0)┆评论(0) ┆ 返回博主首页┆返回博客首页
上一篇 TCP_DEFER_ACCEPT与高性能web服务器 下一篇 linux内核实现中的小工具
2011-04-08 17:40:42
socketpair是个函数吗?
2012-08-24 14:39:02
“若将父进程阻塞一段时间,则收到数据的就是子进程了,已经得到验证,让父进程sleep(3),子进程获得string,而父进程获取不到”
我验证的情况是,父进程一直阻塞在read上。我想不明白,为什么这时候父进程不能读取数据呢。
而上一种情况,父进程先读取数据,子进程仍然可以读取数据(数据为空),但子进程不会阻塞在read上。
按照你的见解,指向相同文件表项的指针。那这时候为什么这个指针又不起作用了呢。期待您的解答。谢谢。
2012-09-04 02:08:36
回复 笨笨:
已于文中详细解释,欢迎指正,谢谢
2012-09-12 20:40:38
回复 GJjinger:
谢谢你的解答,已经明白了。
“根据read的语义,当子进程被唤醒后会读取到EOF。”又学习了。是不是read一个被系统释放的描述符,就会这样呢?
我写个例子验证下,。
再次感谢!
以上就是关于socketpair的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-44-2.html
但菲律賓可能當全新最強用
那个翻白眼好萌