通过单管道(pipe)实现两个进程间双向通信
用例:
#include <stdio.h>
#include <unistd.h>#define BUF_SIZE 30int main(int argc, char const *argv[])
{char req[] = "Who are you?";char rsp[] = "I'm xunye.";char buf[BUF_SIZE];int fds[2];pipe(fds);pid_t pid = fork();if (pid == 0){write(fds[1], req, sizeof(req)); // 子进程写入数据sleep(2); // 防止子进程写入管道的数据被自己读取了。read(fds[0], buf, BUF_SIZE); // 子进程读取父进程写入的数据printf("Child proc output: %s\n", buf);}else{read(fds[0], buf, BUF_SIZE); // 父进程读取子进程写入的数据printf("Parent proc output: %s\n", buf);write(fds[1], rsp, sizeof(rsp)); // 父进程写入数据sleep(3); // 防止父进程先退出}return 0;
}
执行输出结果:
【注】通过单管道实现两个进程间通信时存在缺陷:
需要确定好各进程间数据的读写时机,通过上述代码中子进程代码部分的sleep使用可以佐证。
解决方法可以采用两个管道实现两个进程间的通信。
通过单管道(pipe)实现两个进程间双向通信相关推荐
- C# 调用Windows API实现两个进程间的通信
使用Windows API实现两个进程间(含窗体)的通信 http://blog.csdn.net/huangxinfeng/article/details/5513608 从C#下使用WM_COPY ...
- Linux-C语言-利用有名管道简单实现两个进程间的全双工通信
有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...
- Linux高级进程编程———在任意两个进程间传递文件描述符:使用 sendmsg 和 recvmsg 实现
进程间传递打开的文件描述符,并不是传递文件描述符的值.那么在传递时究竟传递了什么?我们要先搞明白这个问题. 1.文件描述符 文件描述符的值与文件没有任何联系,只是该文件在进程中的一个标识,所以同一文件 ...
- python网络编程--创建简单的UPD套接字实现两个进程间互相通信
Socket 什么是socket Socket通常又称"套接字",应用程序通常会通过"套接字"实现向网络发出请求或者相应网络请求,从而实现不同计算机之间或同一计 ...
- 管道 通过匿名管道在进程间双向通信
参考网址:http://www.xuebuyuan.com/1959215.html 我的测试代码: Pipe_Server_VC6_Console.exe : 1 #include <wind ...
- 关于Qt的QProcess进程间双向通信
文章目录 前言 一.QProceess简介 二.实例 1.进程A(主进程) 2.进程B 3.运行 总结 前言 Qprocess作为Qt的进程通信类,在程序中的应用还是挺多的,不管是启动一个命令行,还是 ...
- Qt使用QProcess进程间双向通信(linux和win系统)
文章目录 监听效果图 前言 QProcess 猜想实现 实例验证(Linux系统实现) 问题分析 代码实现 Win系统子进程监听实现 题外话 qprocess 如何关闭子进程 监听效果图 前言 最近需 ...
- 进程间数据传递:Queue,Pipe 进程间数据共享:Manager
进程间数据传递:Queue,Pipe 进程间数据共享:Manager 1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯:Queue,用法跟线程里的Queue一样, ...
- 进程间的通信方式(二):管道Pipe和命令管道FIFO
1.概述 管道是最初的Unix IPC通信,可追溯到1973年的Unix第三版.尽管对于许多操作来说很有用,但它们的根本局限于没有名字,只能由亲缘关系的进程使用.这一点随着FIFO的加入System ...
最新文章
- Xilinx RAM IP核的使用
- vi编辑器基本使用方法
- linux 权限测试,linux下检测root权限的shell脚本
- MySQL如何修改表的储存方式_修改mysql默认存储引擎的方法
- 产品设计的基本原则是什么
- MDPI期刊-引用文献格式-调整记录
- 打印機lpt接口轉com接口
- php 输入经纬度查询位置,php 根据实际地址获取对应的经纬度
- 笔记本电脑如何安装Linux系统
- mac 配置host
- 谷歌邮箱lmap服务器填什么_google邮箱设置方法是什么?
- HTML基础常识问答(四)
- Leetcode报错runtime error
- 饭后开车的不良习惯要改正
- C语言所有头文件整理
- 【HTTP】请求方法
- php 抓取 知乎专栏,php爬取知乎用戶信息
- 2018年网易实习生笔试题集合之牛牛的闹钟
- 电路拆解——C4-12锂电池充电器
- 【用java写的一个excel签到表】
热门文章
- Spec2017编译526.blender_r报错解决
- Transfer Learning从入门到放弃(二)
- 火绒安全v5.0.45 附单文件版
- IntelliJ IDEA 为JAVA 项目添加lib
- 2019, XII Samara Regional Intercollegiate Programming Contest 全部题解
- 一本深入探讨C++11~C++17最新语言特性的书推荐给你
- 192.168.1.1是什么?192.168.1.1详细解释!
- html背景视频模糊效果,怎么给竖屏视频添加模糊背景的效果
- 福州市水利应急防汛管理泉舟创新中心【产品经理】
- itunes在计算机中丢失,iTunes用户莫名丢失音乐文件 苹果将发布更新