管道 通过匿名管道在进程间双向通信
参考网址:http://www.xuebuyuan.com/1959215.html
我的测试代码:
Pipe_Server_VC6_Console.exe :
1 #include <windows.h> 2 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 //定义四个句炳保留两个管道的信息 9 HANDLE hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2; 10 SECURITY_ATTRIBUTES sat; 11 STARTUPINFO startupinfo; 12 PROCESS_INFORMATION pinfo; 13 BYTE buffer[1024]; 14 DWORD byteRead, byteWrite; 15 16 string rString; 17 string m_Host= "Pipe_Client_VC6_Console.exe"; 18 19 sat.nLength=sizeof(SECURITY_ATTRIBUTES); 20 sat.bInheritHandle=true; 21 sat.lpSecurityDescriptor=NULL; 22 23 //创建管道,它用来做子进程的输出 24 if(!CreatePipe(&hReadPipe1, &hWritePipe1, &sat, NULL)) 25 { 26 cout<<("Create Pipe Error!")<<endl; 27 return 1; 28 } 29 30 //创建管道,它用来做子进程的输入 31 if(!CreatePipe(&hReadPipe2, &hWritePipe2, &sat, NULL)) 32 { 33 cout<<"Create Pipe Error!"<<endl; 34 return 1; 35 } 36 37 startupinfo.cb=sizeof(STARTUPINFO); 38 //用GetStartupInfo获得当前进程的参数,否则STARTUPINFO参数太多,会让人抓狂 39 GetStartupInfo(&startupinfo); 40 startupinfo.hStdInput = hReadPipe2; 41 startupinfo.hStdError=hWritePipe1; 42 startupinfo.hStdOutput=hWritePipe1; 43 //要有STARTF_USESTDHANDLES,否则hStdInput, hStdOutput, hStdError无效 44 startupinfo.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; 45 startupinfo.wShowWindow=SW_HIDE; 46 if(!CreateProcess(NULL, (char*)m_Host.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &startupinfo, &pinfo)) 47 { 48 cout<<("create process error!")<<endl; 49 return 1; 50 } 51 52 RtlZeroMemory(buffer,1024); 53 //进程的输出重定向到hWritePipe1,所以从hReadPipe1读取 54 // 在从管道中读取到数据前父进程将发生阻塞 55 if (ReadFile(hReadPipe1,buffer,1023,&byteRead,NULL)) 56 { 57 cout<<buffer; 58 } 59 60 string csWrite = "ping www.sina.com.cn\r\n"; 61 //进程的输入重定向到hReadPipe2,所以从hWritePipe2写入 62 // 向管道中写数据不会发生阻塞,此循环会一直执行下去。 63 while (WriteFile(hWritePipe2, (LPCVOID)csWrite.c_str(), csWrite.length() + 1, &byteWrite, NULL)) 64 { 65 Sleep(1000); 66 cout << "write " << byteWrite << endl; 67 } 68 69 70 CloseHandle(hReadPipe1); 71 CloseHandle(hReadPipe2); 72 CloseHandle(hWritePipe1); 73 CloseHandle(hWritePipe2); 74 75 return 0; 76 }
Pipe_Client_VC6_Console.exe :
1 #include <windows.h> 2 3 #include <iostream> 4 using namespace std; 5 6 int main(int argc, char* argv[]) 7 { 8 HANDLE hRead = GetStdHandle(STD_INPUT_HANDLE); 9 HANDLE hWrite = GetStdHandle(STD_OUTPUT_HANDLE); 10 11 char s[] = "Hello, I am child process\n"; 12 DWORD dwWrite; 13 14 if (!WriteFile(hWrite, s, strlen(s) + 1, &dwWrite, NULL)) 15 { 16 cout << "Write to pipe failed!" << endl; 17 return -1; 18 } 19 20 char buf[100]; 21 DWORD dwRead; 22 if(!ReadFile(hRead, buf, 100, &dwRead, NULL)) 23 { 24 cout << "Read from pipe failed!" << endl; 25 return -1; 26 } 27 28 return 0; 29 }
C
转载于:https://www.cnblogs.com/CodeSkill/p/4951888.html
管道 通过匿名管道在进程间双向通信相关推荐
- 通过单管道(pipe)实现两个进程间双向通信
用例: #include <stdio.h> #include <unistd.h>#define BUF_SIZE 30int main(int argc, char con ...
- 有名管道FIFO,进行双进程的“双向通信”
更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 本篇记录应用有名管道FIFO,进行双进程的"双向通信" ...
- 【Linux】进程间通信--管道(匿名管道和命名管道)
文章目录 前言 进程间通信的目的 管道 匿名管道 管道特点 站在文件描述符角度理解管道 匿名管道通信读写特点 命名管道 命名管道的原理 命名管道的创建 命名管道完成两个不同进程通信 匿名管道和命名管道 ...
- C++学习:第六章Linux高级编程 - (七)信号、sigqueue、sigaction、IPC、管道、匿名管道
回顾: 1. 信号的作用 2. 理解信号: 软中断 可靠与不可靠信号 kill -l 3. 信号发送与注册 kill/raise alarm setitimer signal 4. 信号的屏蔽 sig ...
- Linux-C语言-利用有名管道简单实现两个进程间的全双工通信
有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...
- #Linux#进程间通信# 管道(pipe)-匿名管道pipe
我们通常把一个进程连接到另一个进程的一个数据流称为一个"管道",通常是用作把一个进程的输出通过管道连接到另一个进程的输入.管道本质上是内核的一块缓存.内核使用环形队列机制,借助内核 ...
- php+管道+pipe管道,C++ 匿名管道执行DOS命令
最近在开发一个项目.需要PHP Sock连接到服务器中执行DOS 命令 , 所以想到了命名管道 CreatePipe 其函数原型BOOL CreatePipe( PHANDLE hReadPipe, ...
- 进程间通信之管道(匿名管道与命名管道)
进程间通信之管道 进程间通信 管道 什么是管道 管道分类--1.匿名管道 匿名管道举例 管道的特点 管道分类--2.命名管道 创建一个命名管道 举例 命名管道的打开规则 匿名管道与命名管道的区别 具体 ...
- 关于Qt的QProcess进程间双向通信
文章目录 前言 一.QProceess简介 二.实例 1.进程A(主进程) 2.进程B 3.运行 总结 前言 Qprocess作为Qt的进程通信类,在程序中的应用还是挺多的,不管是启动一个命令行,还是 ...
最新文章
- VMWare虚拟机网络连接
- 怎么添加新项目到svn服务器,用eclipse+svn插件,上传新项目到svn服务器
- IDEA Reference - Essentials(基本要义)
- php 7.1安装教程
- 【动态规划】[Uva11270]Tiling Dominoes
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
- GIL , 线程池 , 同步 , 异步 , 队列 , 事件
- Kafka Producer源码简述
- springcloud -zuul(2-执行流程及源码)
- 边缘计算应用场景_从6大应用场景,看边缘计算落地生根
- CABAC基于上下文的自适应二进制熵编码
- Atitit 近年来的软件与编程与技术趋势大盘点 and 2017 未来技术趋势attilax总结
- 新版Cadence打开PSpice8.0工程文件
- 数字图像处理课后习题汇总
- 【C++】单例模式代码实现
- gh-ost 参数解析,看这一篇就够了!
- 输出一个由*组成的三角形图案_Python中实现个性图案的方案
- lammps及Reaxff反应力场二合一专题内容都在这
- 风险投资VC对ESG指标的影响
- [Power Query] 删除重复项
热门文章
- CRC 冗余校验计算
- android中shape的属性
- CListCtrl,SetItemState 高亮(显示蓝色)
- 旋转矩阵与欧拉角的相互转换及代码
- mysql存储过程更新数据后返回一个字段_史上最全存储引擎、索引使用及SQL优化的实践...
- mysql 表变量_在MySQL中创建表变量
- html textarea粘贴事件,javascript在textarea中捕获粘贴事件
- 容灾服务器作用,存储容灾服务
- 现在企业编程用java还是python_想转行做程序员,是学习 Java 还是 Python 更好?
- 浏览器 刷新页面后回到顶部_当你在浏览器中,忘记了曾经的登录密码怎么办......