与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);
}
}
}

socketpair的更多相关文章

  1. socketpair理解

    转载:http://liulixiaoyao.blog.51cto.com/1361095/533469/ 今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解 ...

  2. [转] IPC之管道、FIFO、socketpair

    管道和FIFO作为最初的UNIX IPC形式,现在已用得较少.SocketPair可作为全双工版本的管道,较为常用,这里简单做个笔记 管道 * 只用于有亲缘关系的进程间通信 * 单向,即半双工 (双向 ...

  3. socketpair的使用

    socketpair函数概要例如以下:#include <sys/types.h>#include <sys/socket.h>int socketpair(int domai ...

  4. socketpair创建双向通信的管道(全双工通信)

    Linux下socketpair介绍: socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,例如sv[2] .这对套接字可以进行双工通信,每一个 ...

  5. UNIX网络编程——UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  6. c/c++ linux 进程间通信系列3,使用socketpair,pipe

    linux 进程间通信系列3,使用socketpair,pipe 1,使用socketpair,实现进程间通信,是双向的. 2,使用pipe,实现进程间通信 使用pipe关键点:fd[0]只能用于接收 ...

  7. 输入系统:进程间双向通信(socketpair+binder)

    一.双向通信(socketpair) socketpair()函数用于创建一对无名的.相互连接的套接子,如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1]:否则返回-1,错误码保存于e ...

  8. socketpair初识

    #include <stdio.h>  #include <string.h>  #include <unistd.h>  #include <sys/typ ...

  9. Libevent学习之SocketPair实现

    Libevent设计的精化之一在于把Timer事件.Signal事件和IO事件统一集成在一个Reactor中,以统一的方式去处理这三种不同的事件,更确切的说是把Timer事件和Signal事件融合到了 ...

  10. UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

随机推荐

  1. 《A chorus section detection method for musical audio signals and its application to a music listening section》

    Abstract: 重复的副歌识别对音乐理解的计算模型(computational model)至关重要,应用层面有:音乐副歌识别预览,音乐检索等. 传统检测的难点:变调,起始点和结束点(both e ...

  2. 360CTF Re wp

    这比赛唯一的一道Re

  3. FFmpeg从入门到出家(HEVC在RTMP中的扩展)

    由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...

  4. CentOS7搭建Kafka单机环境及基础操作

    前提 安装Kafka前需要先安装zookeeper集群,集体安装方法请参照我的另一篇文档. Kafka安装 下载 wget https://archive.apache.org/dist/kafka/ ...

  5. ssh免口令密码登录及兼容性处理

    1). client ---> server 客户端发起对服务器的连接,登录服务器. 2). 须在客户端生成密钥对 注意: 公钥加密私钥解:私钥加密公钥解. 可以发布公钥,但私钥是不能出本机的. ...

  6. 我是如何用python给Thunar写GUI插件的 (pygtk+glade)

    更新:zip乱码的问题可以通过安装patch之后的p7zip-natspec和unzip-natspec解决(archlinuxcn源),而仍使用Engrampa做前端.此文重点在pygtk... 问 ...

  7. Vue.js 技术揭秘学习 (3) render

    Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node  ,返回的是一个VNode 在 Vue 的官方文档中介绍了 render 函数的第一个参数是 createE ...

  8. PDO扩展

    <?php class db extends PDO { private $error; private $sql; private $bind; private $errorCallbackF ...

  9. Pyhton---基础---递归

    2019-05-21 ------------------------------------------- 一. #类似于栈的先进后出模式def digui(num):    print(num)  ...

  10. handy源码阅读(三):SafeQueue类

    SafeQueue类继承与信号量mutex(用于加锁),nonocopyable 定义如下: template <typename T> struct SafeQueue : privat ...