欢迎来到天天文库
浏览记录
ID:42657704
大小:41.10 KB
页数:13页
时间:2019-09-19
《通过pipe进程间通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于visualc++之windows核心编程代码分析(17)通过pipe进程间通信分类:VC++编程技术VisualC++2010编程技术VisualStudio2012Windows8信息安全2011-12-1712:17120人阅读评论(0)收藏举报管道是一种用于在进程间共享数据的机制,其实质是一段共享内存。Windows系统为这段共享的内存设计采用数据流I/0的方式来访问。由一个进程读、另一个进程写,类似于一个管道两端,因此这种进程间的通信方式称作“管道”。 管道分为匿名管道和命名管道。
2、 匿名管道只能在父子进程间进行通信,不能在网络间通信,而且数据传输是单向的,只能一端写,另一端读。 命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读、一端写。 管道客户端代码实现如下viewplaincopytoclipboardprint?1./* 头文件 */ 2.#include 3.#include 4.#include 5.#include 6./* 常
3、量 */ 7.#define BUFSIZE 512 8./* ************************************ 9.* int main(VOID) 10.* 功能 pipe 通信服务端主函数 11.**************************************/ 12.int main(int argc, TCHAR *argv[]) 13.{ 14. HANDLE hPipe; 15. LPTSTR lpvMessage=
4、TEXT("Default message from client"); 16. TCHAR chBuf[BUFSIZE]; 17. BOOL fSuccess; 18. DWORD cbRead, cbWritten, dwMode; 19. LPTSTR lpszPipename = TEXT("\\.\pipe\samplenamedpipe"); 1. 2. if( argc > 1 ) // 如果输入了参数,则使用输入的参数 3
5、. lpvMessage = argv[1]; 4. while (1) 5. { 6. // 打开一个命名pipe 7. hPipe = CreateFile( 8. lpszPipename, // pipe 名 9. GENERIC_READ
6、 GENERIC_WRITE, // 可读可写 10. 0, // 不
7、共享 11. NULL, // 默认安全属性 12. OPEN_EXISTING, // 已经存在(由服务端创建) 13. 0, // 默认属性 14. NULL); 15. if (hPipe != INVALID_HANDLE_VALUE) 16. break; 17. 18. // 如果
8、不是 ERROR_PIPE_BUSY 错误,直接退出 19. if (GetLastError() != ERROR_PIPE_BUSY) 20. { 21. printf("Could not open pipe"); 22. return 0; 23. } 24. 25. // 如果所有pipe实例都处于繁忙状态,等待2秒。 26. if (!WaitNamedP
9、ipe(lpszPipename, 2000)) 27. { 28. printf("Could not open pipe"); 29. return 0; 30. } 31. } 32. 33. // pipe已经连接,设置为消息读状态 34. dwMode = PIPE_READMODE_MESSAGE; 35.
此文档下载收益归作者所有