溫馨提示×

管道函數(shù)CreateNamedPipe與ConnectNamedPipe()的用法

小億
184
2023-12-25 18:00:07
欄目: 編程語言

CreateNamedPipe函數(shù)是用來創(chuàng)建一個命名管道的函數(shù)。它的原型如下:

HANDLE CreateNamedPipe(

??LPCTSTR???????????????lpName,

??DWORD?????????????????dwOpenMode,

??DWORD?????????????????dwPipeMode,

??DWORD?????????????????nMaxInstances,

??DWORD?????????????????nOutBufferSize,

??DWORD?????????????????nInBufferSize,

??DWORD?????????????????nDefaultTimeOut,

??LPSECURITY_ATTRIBUTES?lpSecurityAttributes );

lpName是管道的名稱,可以使用一個命名規(guī)則來指定。dwOpenMode表示管道的打開模式,可以是PIPE_ACCESS_INBOUND(只讀)、PIPE_ACCESS_OUTBOUND(只寫)或PIPE_ACCESS_DUPLEX(讀寫)。dwPipeMode表示管道的模式,可以是PIPE_TYPE_BYTE(字節(jié)模式)或PIPE_TYPE_MESSAGE(消息模式)。nMaxInstances表示管道的最大實(shí)例數(shù)。nOutBufferSize和nInBufferSize分別表示管道的輸出緩沖區(qū)和輸入緩沖區(qū)的大小。nDefaultTimeOut表示默認(rèn)的超時時間。lpSecurityAttributes是一個指向SECURITY_ATTRIBUTES結(jié)構(gòu)的指針,用于指定管道的安全性。
ConnectNamedPipe函數(shù)用于等待客戶端連接到命名管道上。它的原型如下:

BOOL?ConnectNamedPipe(

??HANDLE???????hNamedPipe,

??LPOVERLAPPED?lpOverlapped );

hNamedPipe是CreateNamedPipe函數(shù)返回的管道句柄。lpOverlapped是一個指向OVERLAPPED結(jié)構(gòu)的指針,用于異步操作。
使用方法如下:
1. 創(chuàng)建命名管道:

HANDLE?hPipe;
hPipe?=?CreateNamedPipe(

????TEXT(“\\.\pipe\MyPipe”),??//?管道名稱

????PIPE_ACCESS_DUPLEX,???????????//?讀寫模式

????PIPE_TYPE_BYTE,???????????????//?字節(jié)模式

????1,????????????????????????????//?最大實(shí)例數(shù)

????4096,?????????????????????????//?輸出緩沖區(qū)大小

????4096,?????????????????????????//?輸入緩沖區(qū)大小

????0,????????????????????????????//?默認(rèn)超時時間

????NULL??????????????????????????//?安全性 );

2. 等待客戶端連接:

BOOL?bConnected;
bConnected?=?ConnectNamedPipe(hPipe,?NULL);

3. 使用管道進(jìn)行數(shù)據(jù)傳輸?shù)炔僮鳌?br/>注意事項(xiàng):
CreateNamedPipe函數(shù)需要在服務(wù)器端調(diào)用,用于創(chuàng)建命名管道。
ConnectNamedPipe函數(shù)需要在服務(wù)器端調(diào)用,用于等待客戶端連接到管道上。
通常情況下,服務(wù)器端先調(diào)用CreateNamedPipe函數(shù)創(chuàng)建命名管道,然后調(diào)用ConnectNamedPipe函數(shù)等待客戶端連接。客戶端使用CreateFile函數(shù)打開命名管道,然后可以進(jìn)行數(shù)據(jù)傳輸?shù)炔僮鳌?br/>管道的名稱需要以"\.\pipe"開頭。
管道可以用來進(jìn)行進(jìn)程間通信。

0