利用socketpair创建类全双工管道进行父子进程通信
fork的使用
struct msghdr hdr;赋值操作需要熟练掌握
//实现父进程传输文件对象给子进程
int sendfd(int Wpipefd,int fdtosend)
{
struct msghdr hdr;
bzero(&hdr,sizeof(hdr));//一定要记得初始化hdr
//进行正文信息的打包 正文部分一定要写
char buf1[]="hello";
char buf2[]="world";
struct iovec iov[2];
iov[0].iov_base=buf1;
iov[0].iov_len=5;
iov[1].iov_base=buf2;
iov[1].iov_len=5;
hdr.msg_iov=iov;
hdr.msg_iovlen=2;
//进行控制信息的打包 这次我们的data是要进行传输的文件描述符
struct cmsghdr *pcmsghdr;//可变长结构体一定要通过结构体指针指向calloc分配的堆区
pcmsghdr = (struct cmsghdr *)calloc(1,CMSG_LEN(sizeof(int)));
pcmsghdr->cmsg_len=CMSG_LEN(sizeof(int));//fdsize=4B;
pcmsghdr->cmsg_level=SOL_SOCKET;
pcmsghdr->cmsg_type=SCM_RIGHTS;//类型说明了要传递的是一个文件对象
*(int *)CMSG_DATA