免费注册 查看新帖 |

Chinaunix

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

辅助数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-18 14:47 |只看该作者 |倒序浏览
在看STEVEN的一个例子,用UNIX DOMAIN和辅助数据实现父子进程之间传递文件描述符,即用socketpair创建一个流管道,子进程打开一个文件,将描述字作为辅助数据传送给父进程,父进程读。
但我不明白这样做的目的是什么,如果要读写一个文件,直接打开不就得了吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-04-18 14:53 |只看该作者

辅助数据

这个仅仅是为了说明描述字是可以被传递的。重点是描述字如何通过刘管道来传输的。

至于为了实现父子进程共享一个描述字,估计几乎没有人使用这个示例代码的。

论坛徽章:
0
3 [报告]
发表于 2003-04-18 16:54 |只看该作者

辅助数据

辅助数据是通过sendmsg和recvmsg传递的,我看了两个例子,一个是传递描述符,一个是传递用户凭证,在cmsg_type里都要分别设置对应的类型,请问:
1.不能随意传递其他任意类型的数据吗?
2.只能和UNIX DOMAIN结合使用,不可以用于一般的SOCKET中吗
3.在传递用户凭证中我只看到了SERVER端的代码,(需要先设置一下SOCKET选项,再recvmsg,这样如果是TCP连接的话,内核会在连接后第一次发送数据时送上辅助数据,UDP会在每次数据发送时送辅助数据.),但是CLIENT端的代码又如何呢?需要设置SOCKET选项目吗

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-04-18 18:33 |只看该作者

辅助数据

1.可以用于传递其他类型的数据
2.只能用于stream方式,所以适用于unix stream和tcp socket
3.当带外数据到达的时候,会接收到SIGURG. 如果没有使用setsocket设置SO_OOBINLINE, 可以用recv...带MSG_OOB option接收带外数据.
如果设置了这个选项,就可以和正常数据一样读取.

那本书我想只是个使用的例子,并没有多大实用

不过我觉得带外数据,在一些协议的控制方式中会有作用. 我记得telnet和rlogin的中断键处理就用到了这种方式

论坛徽章:
0
5 [报告]
发表于 2003-04-18 19:27 |只看该作者

辅助数据

那如果不知道应该读什么文件呢
或是为了系统安全性而使用传递描述字的方法使其它进程可以访问到平时读不到的内容呢

论坛徽章:
0
6 [报告]
发表于 2003-04-18 19:32 |只看该作者

辅助数据

当然我没有试过能不能通过它访问本进程不能访问的文件

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-04-18 21:01 |只看该作者

辅助数据

楼主说的是子进程打开的文件描述符,传递给父进程,

fork之后,父子进程各自有独立的文件描述符表(虽然初始子进程是复制父进程的),但是fork之后打开的文件,是相互不知道的,也就是说,子进程打开的文件描述符与父进程无关. 这样,父进程用这个描述符的话,如果之前表中没有打开这个描述符(相同的值),就是返回INVALID错; 恰巧有的话,那也只是父进程操作自己打开的文件.

论坛徽章:
0
8 [报告]
发表于 2003-04-18 23:16 |只看该作者

辅助数据

如果是像楼上说的那样
那么这个就没有什么意义了

因为可以通过其它方法得到这个文件描述字
不用这种特殊方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP