父子进程间分发FD
来源:互联网 发布:淘宝客佣金怎么算的 编辑:程序博客网 时间:2024/06/11 23:34
int fd_pair(int fd[2]){ return socketpair(AF_UNIX, SOCK_DGRAM, 0, fd);}int fd_send(int sockfd, int fd, int type){ int data; struct iovec iov_data; struct msghdr msg_hdr; struct cmsghdr *cmsg_hdr; char msg_ctrl[CMSG_SPACE(1*sizeof(int))]; memset(msg_ctrl, 0, CMSG_SPACE(1*sizeof(int))); data = type; iov_data.iov_base = &data; iov_data.iov_len = sizeof(int); msg_hdr.msg_name = NULL; msg_hdr.msg_namelen = 0; msg_hdr.msg_iov = &iov_data; msg_hdr.msg_iovlen = 1; msg_hdr.msg_control = msg_ctrl; msg_hdr.msg_controllen = CMSG_SPACE(1*sizeof(int)); msg_hdr.msg_flags = 0; cmsg_hdr = CMSG_FIRSTHDR(&msg_hdr); cmsg_hdr->cmsg_len = CMSG_LEN(1*sizeof(int)); cmsg_hdr->cmsg_level = SOL_SOCKET; cmsg_hdr->cmsg_type = SCM_RIGHTS; ((int*)CMSG_DATA(cmsg_hdr))[0] = fd; return sendmsg(sockfd, &msg_hdr, 0);}int fd_recv(int sockfd, int *fd, int *type){ int ret; int data; struct iovec iov_data; struct msghdr msg_hdr; struct cmsghdr *cmsg_hdr; char msg_ctrl[CMSG_SPACE(1*sizeof(int))]; memset(msg_ctrl, 0, CMSG_SPACE(1*sizeof(int))); iov_data.iov_base = &data; iov_data.iov_len = sizeof(int); msg_hdr.msg_name = NULL; msg_hdr.msg_namelen = 0; msg_hdr.msg_iov = &iov_data; msg_hdr.msg_iovlen = 1; msg_hdr.msg_control = msg_ctrl; msg_hdr.msg_controllen = CMSG_SPACE(1*sizeof(int)); msg_hdr.msg_flags = 0; cmsg_hdr = CMSG_FIRSTHDR(&msg_hdr); cmsg_hdr->cmsg_len = CMSG_LEN(1*sizeof(int)); cmsg_hdr->cmsg_level = SOL_SOCKET; cmsg_hdr->cmsg_type = SCM_RIGHTS; ((int *)CMSG_DATA(cmsg_hdr))[0] = -1; if((ret = recvmsg(sockfd, &msg_hdr, 0)) <= 0) return ret; if(fd) *fd = ((int*)CMSG_DATA(cmsg_hdr))[0]; if(type) *type = data; return ret;}void fd_close(int fd){ if(fd > 0) close(fd);}
0 0
- 父子进程间分发FD
- 父子进程间通信
- 亲情进程间传递打开的fd
- 进程间传递文件描述符fd
- inux进程间传递fd备忘
- 利用 libancillary 实现进程间传递fd
- 父子进程间 IPC 总结
- 父子进程间信号通信
- 父子进程间文件共享
- 父子进程间的单向管道通信
- fork 父子进程间信号关系
- 共享内存实现父子进程间通讯
- 信号实现父子进程间同步
- 匿名管道 父子进程间通信
- python之父子进程间通信
- 父子进程间的共享内存通信
- 父子进程间通信---通过设置环境变量
- 09-进程间通信-无名管道(父子进程间)
- sql语句整合_自己以后整理
- 带行间距的TextView,让文字和ImageSpan中的图片居中显示
- JDBC(六) 编写通用的更新和查询方法
- android studio 使用过程中遇到的问题
- 使用 C++ .NET 和 MFC 嵌入并自动化 Word 文档
- 父子进程间分发FD
- RasEnumEntries
- Class对象和Java反射机制
- 关于C语言指针数组的几个实例
- php面向对象魔术方法
- Pascal's Triangle II
- win7下Android studio添加genymotion后,运行模拟器时,Virtualbox出错(提示VBoxDD.DLL错误)的解决方案
- 第4章第1节练习题11 查找最近公共祖先节点
- C#基础知识(二)== 与equal比较