linux socket 进程通信,linux进程通信(socket与sendmsg)

先看一段示例代码:

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无输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值