通过pipe进程间通信文档格式.docx

上传人:b****3 文档编号:15757098 上传时间:2022-11-15 格式:DOCX 页数:14 大小:22.41KB
下载 相关 举报
通过pipe进程间通信文档格式.docx_第1页
第1页 / 共14页
通过pipe进程间通信文档格式.docx_第2页
第2页 / 共14页
通过pipe进程间通信文档格式.docx_第3页
第3页 / 共14页
通过pipe进程间通信文档格式.docx_第4页
第4页 / 共14页
通过pipe进程间通信文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

通过pipe进程间通信文档格式.docx

《通过pipe进程间通信文档格式.docx》由会员分享,可在线阅读,更多相关《通过pipe进程间通信文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

通过pipe进程间通信文档格式.docx

512 

8./* 

************************************ 

9.* 

int 

main(VOID) 

10.* 

功能 

pipe 

通信服务端主函数 

11.**************************************/ 

12.int 

main(int 

argc, 

TCHAR 

*argv[]) 

13.{ 

14. 

HANDLE 

hPipe;

15. 

LPTSTR 

lpvMessage=TEXT("

Default 

message 

from 

client"

);

16. 

chBuf[BUFSIZE];

17. 

BOOL 

fSuccess;

18. 

DWORD 

cbRead, 

cbWritten, 

dwMode;

19. 

lpszPipename 

TEXT("

\\\\.\\pipe\\samplenamedpipe"

20. 

21. 

if( 

argc 

>

) 

// 

如果输入了参数,则使用输入的参数 

22. 

lpvMessage 

argv[1];

23. 

while 

(1) 

24. 

25. 

打开一个命名pipe 

26. 

hPipe 

CreateFile( 

27. 

lpszPipename, 

名 

28. 

GENERIC_READ 

GENERIC_WRITE, 

可读可写 

29. 

0, 

不共享 

30. 

NULL, 

默认安全属性 

31. 

OPEN_EXISTING, 

已经存在(由服务端创建) 

32. 

默认属性 

33. 

NULL);

34. 

if 

(hPipe 

!

INVALID_HANDLE_VALUE) 

35. 

break;

36. 

37. 

如果不是 

ERROR_PIPE_BUSY 

错误,直接退出 

38. 

(GetLastError() 

ERROR_PIPE_BUSY) 

39. 

40. 

printf("

Could 

not 

open 

pipe"

41. 

return 

0;

42. 

43. 

44. 

如果所有pipe实例都处于繁忙状态,等待2秒。

45. 

(!

WaitNamedPipe(lpszPipename, 

2000)) 

46. 

47. 

48. 

49. 

50. 

51. 

52. 

pipe已经连接,设置为消息读状态 

53. 

dwMode 

PIPE_READMODE_MESSAGE;

54. 

fSuccess 

SetNamedPipeHandleState( 

55. 

hPipe, 

句柄 

56. 

&

dwMode, 

新状态 

57. 

不设置最大缓存 

58. 

不设置最长时间 

59. 

fSuccess) 

60. 

61. 

SetNamedPipeHandleState 

failed"

62. 

63. 

64. 

65. 

写入pipe 

66. 

WriteFile( 

67. 

68. 

lpvMessage, 

写入的内容 

69. 

(lstrlen(lpvMessage)+1)*sizeof(TCHAR), 

写入内容的长度 

70. 

实际写的内容 

71. 

非 

overlapped 

72. 

73. 

74. 

WriteFile 

75. 

76. 

77. 

78. 

do 

79. 

80. 

读回复 

81. 

ReadFile( 

82. 

83. 

chBuf, 

读取内容的缓存 

84. 

BUFSIZE*sizeof(TCHAR), 

缓存大小 

85. 

实际读的字节 

86. 

87. 

88. 

GetLastError() 

ERROR_MORE_DATA) 

89. 

//失败,退出 

90. 

91. 

_tprintf( 

%s\n"

), 

chBuf 

打印读的结果 

92. 

fSuccess);

ERROR_MORE_DATA 

或者成功则循环 

93. 

94. 

getch();

//任意键退出 

95. 

关闭句柄 

96. 

CloseHandle(hPipe);

97. 

98.} 

管道服务端代码实现如下,

5./* 

6.#define 

PIPE_TIMEOUT 

5000 

4096 

结构定义 

9.typedef 

struct 

10.{ 

11. 

OVERLAPPED 

oOverlap;

12. 

hPipeInst;

13. 

chRequest[BUFSIZE];

cbRead;

chReply[BUFSIZE];

cbToWrite;

17.} 

PIPEINST, 

*LPPIPEINST;

18./* 

函数声明 

19.VOID 

DisconnectAndClose(LPPIPEINST);

20.BOOL 

CreateAndConnectInstance(LPOVERLAPPED);

21.BOOL 

ConnectToNewClient(HANDLE, 

LPOVERLAPPED);

22.VOID 

GetAnswerToRequest(LPPIPEINST);

23.VOID 

WINAPI 

CompletedWriteRoutine(DWORD, 

DWORD, 

24.VOID 

CompletedReadRoutine(DWORD, 

25./* 

全局变量 

26.HANDLE 

27./* 

28.* 

29.* 

30.**************************************/ 

31.int 

32.{ 

hConnectEvent;

oConnect;

LPPIPEINST 

lpPipeInst;

dwWait, 

cbRet;

fSuccess, 

fPendingIO;

用于连接操作的事件对象 

hConnectEvent 

Crea

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1