与pipe的区别

pipe产生的文件描述符是半双工的,需要pipe两次才能实现全双工,产生的两个描述符是一个读,一个写

socketpair直接就可以全双工,产生的两个文件描述符的任何一个都可读可写

pipe例子

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> int main(){
int fd1[2],fd2[2]; if(pipe(fd1) < 0 || pipe(fd2) < 0)
exit(-1); if(fork()){
int val=0;
close(fd1[0]);
close(fd2[1]); while(1){
sleep(1);
++val;
printf("parent send: %d\n",val);
write(fd1[1],&val,sizeof(val));
read(fd2[0],&val,sizeof(val));
printf("parent received: %d\n",val);
}
}else{
int val;
close(fd1[1]);
close(fd2[0]); while(1){
read(fd1[0],&val,sizeof(val));
printf("son Data received: %d\n",val);
++val;
write(fd2[1],&val,sizeof(val));
printf("son send: %d\n",val);
}
}
}

socketpair例子

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h> int main(){
int fd[2];
int ret; ret=socketpair(AF_LOCAL,SOCK_STREAM,0,fd);
if(ret < 0){
perror("socketpair");
exit(-1);
} if(fork()){
int val=0;
close(fd[1]);
while(1){
sleep(1);
++val;
printf("parent sending data: %d\n",val);
write(fd[0],&val,sizeof(val));
read(fd[0],&val,sizeof(val));
printf("parent Data received: %d\n",val);
}
}else{
int val;
close(fd[0]);
while(1){
read(fd[1],&val,sizeof(val));
printf("son Data received: %d\n",val);
++val;
write(fd[1],&val,sizeof(val));
printf("son send received: %d\n",val);
}
}
}

最新文章

  1. 前端必须了解的布局常识:普通流(normal flow)
  2. Glide 图片加载库
  3. CSS3选择器(一)
  4. [Javascript] Introduce to Webpack
  5. 快学Scala-第五章 类
  6. D - MUH and Cube Walls
  7. [RHEL 7]ISCSI服务端及客户端连接配置
  8. conda安装cv2库
  9. UltraEdit使用(工具类似于notepad++)
  10. 洛谷P2569 股票交易 [SCOI2010] dp
  11. 20175317 《Java程序设计》第五周学习总结
  12. Java诊断工具
  13. sd错误---2
  14. PHP Zend Email验证函数MailVal()函数的使用
  15. 本地开发不用改hosts 也可以绑定域名开发
  16. 峰Redis学习(9)Redis 集群(概述)
  17. Eclipse技术: 项目文件中过滤.o文件
  18. Linux系统结构 详解(转)
  19. 解决get方法传递URL参数中文乱码问题
  20. 用 Qt 控制 Nikon 显微镜的电动物镜转盘

热门文章

  1. [常用类]排序及Arrays类(简单介绍)
  2. 谈一下你对 uWSGI 和 nginx 的理解??
  3. C#如何在Socket传递负数,比如-51
  4. CSS的重用
  5. 给当当同学的random data
  6. nodejs回调大坑
  7. 如何设置移动端的tab栏
  8. SCRUM REPORT DIRECTORY
  9. DNS服务的安装
  10. Pillow6 起步