先看一段示例代码:
int main() {
int sockfd[2];
pid_t pid;
if(socketpair(AF_UNIX,SOCK_STREAM,0,sockfd)<0)
printf("socket pair");
pid = fork();
if (pid > 0) {
char buf[]="hello China";
ssize_t n;
close(sockfd[0]);//read port
// if((n=write(sockfd[1],buf,sizeof(buf)))<0)
// printf("write error\n");
char line[15]="Hello World";
struct msghdr msg;
struct iovec iov;
msg.msg_name=NULL;
msg.msg_namelen=0;
msg.msg_iov=&iov;
msg.msg_iovlen=1;
msg.msg_iov->iov_base=line;
msg.msg_iov->iov_len=13;
msg.msg_control=NULL;
msg.msg_controllen=0;
sendmsg(sockfd[1],&msg,0);
close(sockfd[1]);
wait(NULL);//等待子进程退出
}
else {
ssize_t n;
char s[100];
struct msghdr msg;
close(sockfd[1]);//write port
// if((n=read(sockfd[0],s,sizeof(s)))<0)
// printf("read error\n");
recvmsg(sockfd[0],&msg,0);
memcpy(s,msg.msg_iov->iov_base,msg.msg_iov->iov_len);
printf("read:%s\n",s);
close(sockfd[0]);
exit(0);//exit退出先把内存数据输出到文件中,_exit直接退出,消除内存中的数据。
}
return 0;
} 通过socketpair函数创建socket描述符,sockfd中一端用于读,一端用于写。read和write代码无问题,但是sendmsg和recvmsg无输出。