专栏首页蓝天进程间传递文件描述符fd

进程间传递文件描述符fd

fd.pdf

众所周知,子进程会继承父进程已经打开的文件描述符fd,但是fork之后的是不会被继承的,这个时候是否无能无力了?答应是NO。Linux提供了一个系统调用sendmsg,借助它,可以实现进程间传递文件描述符fd,而且不仅限于父进程到子进程。sendmsg函数的原型如下:

#include
ssize_t sendmsg(int socket, const struct msghdr *message, int flags);
ssize_t recvmsg(int socket, struct msghdr *message, int flags);

recvmsg函数用来接收fd,这里的socket必须为UnixSocket(AF_UNIX),在Linux上执行man 7 unix,并搜索SCM_RIGHTS,即看到有关说明:Send or receive a set of open file descriptors from another process。

通过sendmsg发送的fd,并不是将fd值传递给目标进程,而是活生生地在目标进程空间里复制指向同一个file结构体的fd,所以不要期望在两个进程中,fd值相同。

具体的使用示例,请baidu或google关键词:sendmsg fd,即可找到,这里就不多说了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux新的API signalfd、timerfd、eventfd使用说明

    原文:http://www.cfanz.cn/?c=article&a=read&id=46555 注意很多当前(2013/8/6)线上运营的Linux...

    一见
  • 理解shell的eval命令

    看以下两条命令: [zhangsan@XEN /sys]$ a="ls";b="\$a";c="$b";"$c" Hey! No comman...

    一见
  • 文件和SOCKET跨线程安全吗?

    将一个文件或SOCKET的句柄fd传递给多个线程,进行读、写和Close操作,是否安全了?答案是“否”,这类似于new一个指针后,这个指针传递给多线程是否安全,...

    一见
  • 好用的 Linux \ Mac 搜索命令 fd 命令用法

    版权声明:本文为 FengCms FungLeo 原创文章,允许转载,但转载必须注明出处并附带首发链接 ...

    FungLeo
  • [038]Binder传输fd细节

    最近在研究Linux IO相关的知识,突然想起来Binder机制可以传递fd,但是没有仔细考虑过下面这个问题。

    王小二
  • 宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)

    早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程访问到这片内存。

    Linux阅码场
  • linux新的API signalfd、timerfd、eventfd使用说明

    原文:http://www.cfanz.cn/?c=article&a=read&id=46555 注意很多当前(2013/8/6)线上运营的Linux...

    一见
  • 深入理解select的行为

    select的第一个参数为输入参数,其它4个参数既是输入也是输出。3个事件集合:读事件集合、写事件集合、异常事件集合。输出为触发了该事件的集合。最后一个参数为还...

    wytheZ
  • Linux下进程间通讯方式 - UNIX Domain Socket

    Linux下进程通讯方式有很多,比较典型的有套接字,平时比较常用的套接字是基于TCP/IP协议的,适用于两台不同主机上两个进程间通信, 通信之前需要指定IP地址...

    程序手艺人
  • 服务器线程并发和进程并发

    Aichen

扫码关注云+社区

领取腾讯云代金券