进程通信:管道(pipe)和socketpair区别
管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂。socketpair直接就可以实现全双工
socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个写
详间代码:
一:pipe实现父子进程全双工通信:
#include <stdlib.h>
#include <stdio.h>int main ()
{int fd1[2],fd2[2];pipe(fd1);pipe(fd2);if ( fork() ) {/* Parent process: echo client */int val = 0;close( fd1[0] );close(fd2[1]);while ( 1 ) {sleep( 1 );++val;printf( "parent Sending data: %d\n", val );write( fd1[1], &val, sizeof(val) );read( fd2[0], &val, sizeof(val) );printf( "parent Data received: %d\n", val );}}else {/* Child process: echo server */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 received: %d\n", val );}}
}
输出结果:parent Sending data: 1
son Data received: 1
son send received: 2
parent Data received: 2
parent Sending data: 3
son Data received: 3
son send received: 4
parent Data received: 4
一:soketpair实现父子进程全双工通信:
#include <sys/types.h>
#include <sys/socket.h>#include <stdlib.h>
#include <stdio.h>int main ()
{int fd[2];int r = socketpair( AF_UNIX, SOCK_STREAM, 0, fd );if ( r < 0 ) {perror( "socketpair()" );exit( 1 );} if ( fork() ) {/* Parent process: echo client */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 {/* Child process: echo server */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 );}}
}
输出结果:parent Sending data: 1
son Data received: 1
son send received: 2
parent Data received: 2
parent Sending data: 3
son Data received: 3
son send received: 4
parent Data received: 4
进程通信:管道(pipe)和socketpair区别相关推荐
- 【并发编程三】C++进程通信——管道(pipe)
[并发编程三]C++实现通信--管道(pipe) 一.管道(pipe) 二.匿名管道 1.简介 2.父子进程:匿名管道的通信过程? 3.相关函数 3.1.创建管道CreatePipe 3.2.写入管道 ...
- Linux进程通信-管道
用户空间进程间通信不可以,如何解决?通过内核空间对象--通信方式 线程间通信?可以在用户空间进行通信,通过全局变量. 线程通信的思路:基于文件io(函数方式不一样) 由此发现,管道通信也如此 通信方式 ...
- linux进程通信:pipe实现进程同步
文章目录 通过管道同步进程 实现代码 管道缓冲区 设置缓冲区大小 总结 :pipe的特点 通过管道同步进程 管道自带同步互斥机制: 管道的内核实现:fs/pipe.c ,主要通过内核的锁以及等待队列等 ...
- 进程通信 - 管道通信
在创建子进程的时候,会将父进程中的资源复制一份给子进程,然后他们各自使用自己的资源,那如果父进程想与子进程通信,如何达到呢,如果说采用套接字的方法,那未免太慢了,是否可以创建一个共同使用的内存,双 ...
- C#进程通信 - 管道通信
语言类型:C# 使用场景:需要使不同进程间可以进行通信 关键代码: #region Pipe/// <summary> G/S:管道接收端 </summary>private ...
- NIO详解(十一):线程间通信管道Pipe
1. 概述 Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取.下面是Pipe原理的图示: 当有两个 ...
- Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结
Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...
- Linux 内核、进程调度、进程通信、多线程、协程
Linux内核 操作系统是什么 内核是什么 从功能层面上来说,内核就是一个中间层,软件和硬件之间交互的中间层,链接层 从其他方面理解内核 系统调用,开放了很多接口:资源管理 内核实现的策略 宏内核 微 ...
- php利用socket_pair进程通信,Linux上实现双向进程间通信管道(socketpair)
管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂.socketpair直接就可以实现全双工 socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个写 L ...
最新文章
- python网站设计开题报告_XX网站设计开题报告范文
- 轻松学习Ionic (二) 为Android项目集成Crosswalk(更新官方命令行工具)
- linux——(8)数据流重定向、管道命令
- 谷歌开发者大会焦点:大中华区新掌门亮相,Android 10原生支持5G,TF2.0大更新...
- js数组的定义方法与基本使用
- JQuery根据值设置radio选中
- 关于IPMI的几个问题
- linux优化服务器,Linux服务器优化
- 小米球(Ngrok)实现内网穿透,让外网可以进行访问本地部署的 API
- 托福试卷真题_托福考试真题 - 韩语自学网
- 牛客网--23803--DongDong认亲戚
- 1147 简单评委打分
- 10_Linux ARM架构-离线部署 Docker + MongoDB-银河麒麟V10操作系统
- 操作系统学习笔记——第二章 进程的描述与控制(二)
- Mac 不显示未知来源选项的解决办法
- 如何下载哨兵1号数据
- 八叉树和十六叉树结构
- cogs 998. [東方S2] 帕秋莉·诺蕾姬
- CSDN图片去水印干货
- 华为服务器有海光芯片,刚拿下高通,华为又获得中国电信服务器订单,英特尔急了...