进程间通信——管道代码实现
2011-09-05 10:01
190 查看
服务端
· 创建管道CreateNamedPipe
· 等待客户端连接ConnectNamedPipe
· Read 或 Write操作
· 断开连接DisconnectNamedPipe
· 关闭句柄
客户端
· 直接使用CreateFile 连接管道
· 对消息类型也可以使用CallNamedPipe
· 创建管道CreateNamedPipe
· 等待客户端连接ConnectNamedPipe
· Read 或 Write操作
· 断开连接DisconnectNamedPipe
· 关闭句柄
#include <windows.h> #include <stdio.h> const DWORD BUFSIZE = 1024; const DWORD PIPE_TIMEOUT = 5000; int main() { HANDLE hPipe = CreateNamedPipeW( L"\\\\.\\pipe\\Dbzhang800Pipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, PIPE_TIMEOUT, NULL); if (hPipe == INVALID_HANDLE_VALUE) { return -1; } for (;;) { if (ConnectNamedPipe(hPipe, NULL) || (GetLastError() == ERROR_PIPE_CONNECTED)) { DWORD dwBytesRead = 0; char szRequest[BUFSIZE]; BOOL bSuccess = ReadFile (hPipe, szRequest, BUFSIZE, &dwBytesRead, NULL); szRequest[dwBytesRead] = '\0'; printf("Data Received: %s\n",szRequest); if (! bSuccess || dwBytesRead == 0) //读一个空字符串时退出 { break; } DisconnectNamedPipe(hPipe); } else { CloseHandle(hPipe); return -2; } } CloseHandle(hPipe); return 0; }
客户端
· 直接使用CreateFile 连接管道
· 对消息类型也可以使用CallNamedPipe
#include <windows.h> #include <stdio.h> const DWORD BUFSIZE = 1024; const DWORD PIPE_TIMEOUT = 5000; int main() { HANDLE hFile = CreateFileW( L"\\\\.\\pipe\\Dbzhang800Pipe", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(hFile == INVALID_HANDLE_VALUE) { printf("cannot connect to Named Pipe\n" ); } else { DWORD dwWrite = 0; char szPipeUpdate[200] = "Data from Named Pipe client"; WriteFile(hFile, szPipeUpdate, (DWORD)strlen(szPipeUpdate), &dwWrite, NULL); printf("%i bytes has send", (int)dwWrite); CloseHandle(hFile); } return 0; }
相关文章推荐
- 进程间通信:管道及命名管道(代码实现)
- Linux进程间通信---有名管道 代码实现
- Linux 上实现双向进程间通信管道
- Linux上实现双向进程间通信管道(socketpair)
- 基于visual c++之windows核心编程代码分析(49)基于匿名管道实现远程控制
- Linus进程间通信(一)管道、命名管道的原理及实现
- Linux 上实现双向进程间通信管道
- Linux 管道替换标准输入输出 实现2个独立程序代码之间的通信
- 进程间通信 - 命名管道实现
- linux 管道实现进程间通信
- Linux 上实现双向进程间通信管道
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 进程间通信 - 命名管道实现
- 进程间通信:共享内存(代码实现)
- 类似unix的管道的ruby简单实现代码简单说明
- 进程间通信详解 - 命名管道实现
- 进程间通信详解 - 命名管道实现
- 基于visual c++之windows核心编程代码分析(49)基于匿名管道实现远程控制
- 进程间通信 - 匿名管道实现
- 进程间通信 - 命名管道实现