Windows C++ 使用PIPE命名管道实现进程间通讯

简介: 本文章是介绍在Windows下,使用PIPE管道实现进程间通讯,可是实现两个进程之前相互发送读取消息。

本文章是介绍在Windows下,使用PIPE管道实现进程间通讯,可是实现两个进程之前相互发送读取消息。


主进程代码

#include "windows.h"#include <iostream>usingnamespacestd;
#define BUF_SIZE 4096// 定义管道名 , 如果是跨网络通信 , 则在圆点处指定服务器端程序所在的主机名#define EXAMP_PIPE   L"\\\\.\\PIPE\\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB"   intmain(intargc, TCHAR*argv[], TCHAR*envp[])
{
// 创建命名管道HANDLEhPipe=NULL;
hPipe=CreateNamedPipe(
EXAMP_PIPE,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
BUF_SIZE,
BUF_SIZE,
0,
NULL);
if (hPipe==INVALID_HANDLE_VALUE)
    {
cout<<"Create Read Pipe Error"<<endl;
returnFALSE;
    }
cout<<"Wait for the connection"<<endl;
// 等待客户端的连接if (!ConnectNamedPipe(hPipe, NULL))
    {
cout<<"Connect Failed"<<endl;
returnFALSE;
    }
DWORDdwReturn=0;
charszBuffer[BUF_SIZE] = { 0 };
// 向客户端发送数据cout<<"Wait for input"<<endl;
cin>>szBuffer;
if (!WriteFile(hPipe, szBuffer, strlen(szBuffer), &dwReturn, NULL))
    {
cout<<"Write Failed"<<endl;
    }
// 读取客户端数据memset(szBuffer, 0, BUF_SIZE);
if (ReadFile(hPipe, szBuffer, BUF_SIZE, &dwReturn, NULL))
    {
szBuffer[dwReturn] ='\0';
cout<<szBuffer<<endl;
    }
else    {
cout<<"Read Failed"<<endl;
    }
DisconnectNamedPipe(hPipe);
CloseHandle(hPipe);
return0;
}



子进程代码

#include "windows.h"#include <iostream>usingnamespacestd;
#define BUF_SIZE 4096// 定义管道名 , 如果是跨网络通信 , 则在圆点处指定服务器端程序所在的主机名#define EXAMP_PIPE   L"\\\\.\\PIPE\\EB3F2E4B_52E2_40F9_A17D_B4A2588F23AB"intmain(intargc, TCHAR*argv[], TCHAR*envp[])
{
HANDLEhPipe=NULL;
charszBuffer[BUF_SIZE] = { 0 };
DWORDdwReturn=0;
// 判断是否有可以利用的命名管道  if (!WaitNamedPipe(EXAMP_PIPE, NMPWAIT_USE_DEFAULT_WAIT))
    {
cout<<"No Read Pipe Accessible"<<endl;
return0;
    }
// 打开可用的命名管道 , 并与服务器端进程进行通信  hPipe=CreateFile(EXAMP_PIPE, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if (hPipe==INVALID_HANDLE_VALUE)
    {
cout<<"Open Read Pipe Error"<<endl;
return0;
    }
cout<<"Wait for the message"<<endl;
// 读取服务端发来的数据if (ReadFile(hPipe, szBuffer, BUF_SIZE, &dwReturn, NULL))
    {
szBuffer[dwReturn] ='\0';
cout<<szBuffer<<endl;
    }
else    {
cout<<"Read Failed"<<endl;
    }
// 向服务端发送数据memset(szBuffer, 0, BUF_SIZE);
cin>>szBuffer;
if (!WriteFile(hPipe, szBuffer, strlen(szBuffer), &dwReturn, NULL))
    {
cout<<"Write Failed"<<endl;
    }
CloseHandle(hPipe);
return0;
}

80后程序员

相关文章
|
1月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
38 0
|
19天前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
1月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
32 0
Linux c/c++之IPC进程间通信
|
1月前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
29 0
Linux c/c++进程间通信(1)
|
1月前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
37 0
Linux c/c++之进程的创建
|
1月前
|
iOS开发 MacOS
MacOS环境-手写操作系统-40-进程消息通讯 和 回车键处理
MacOS环境-手写操作系统-40-进程消息通讯 和 回车键处理
23 2
|
1月前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
21 0
|
2月前
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
2月前
|
SQL 网络协议 数据库连接
已解决:连接SqlServer出现 provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程【C#连接SqlServer踩坑记录】
本文介绍了解决连接SqlServer时出现“provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程”错误的步骤,包括更改服务器验证模式、修改sa用户设置、启用TCP/IP协议,以及检查数据库连接语句中的实例名是否正确。此外,还解释了实例名mssqlserver和sqlserver之间的区别,包括它们在默认设置、功能和用途上的差异。
|
3月前
|
消息中间件 Linux 开发者
Linux进程间通信秘籍:管道、消息队列、信号量,一文让你彻底解锁!
【8月更文挑战第25天】本文概述了Linux系统中常用的五种进程间通信(IPC)模式:管道、消息队列、信号量、共享内存与套接字。通过示例代码展示了每种模式的应用场景。了解这些IPC机制及其特点有助于开发者根据具体需求选择合适的通信方式,促进多进程间的高效协作。
165 3
下一篇
无影云桌面