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)程間通信。