IPC處理序間通訊+郵槽MailSlot IPC(Inter-Process Communication,處理序間通訊)。 現代電腦採用虛擬記憶體機制,為進程提供獨立的足夠大的地址空間,處於安全目的,一個進程不具有特殊的許可權,是無法訪問另一個進程的記憶體空間,進程間相互隔絕。處理序間通訊IPC就需要特別的機制來實現,郵槽MailSlot是常用的IPC方法之一。 1.郵槽(MailSlot): 郵槽MailSlot通訊的進程分為服務端和用戶端。服務端建立MailSlot,建立時指定郵槽名,用戶端同過郵槽名開啟MailSlot。 郵槽是單向的,服務端只能讀取MailSlot,用戶端只能寫入MailSlot。服務端讀取資料是先入先出,即先寫入的資料先被讀取。
2.郵槽命名 : 本機上格式:\\.\mailslot\[path\]name 如:\\.mailslot\my_mailslot
3.基本API函數 : 建立郵槽: HANDLE CreateMailSlot( LPCTSTR lpName, DWORD nMaxMessageSize, DWORD lReadTimeout, LPSECURITY_ATTRIBUTES lpSecurityAttributes); 第一個參數:郵槽名。 第二個參數:最大訊息長度。 第三個參數:讀取逾時,設為0時,沒有訊息立即返回,MAILSLOT_WAIT_FORVER時,一直等待訊息。 第三個參數:安全屬性,一般設為NULL。 該函數建立一個Mailslot,並返回該郵槽的控制代碼。讀取郵槽: BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDOWRD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped); 第一個參數:郵槽控制代碼。 第二個參數:緩衝地址。 第三個參數:訊息的長度。 第四個參數:實際讀取的長度。 第五個參數:一般設定為NULL。 該函數用於讀取郵槽內資料。開啟郵槽: BOOL CreateFile( LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile); 第一個參數:檔案指標。 第二個參數:訪問模式。 第三個參數:共用模式。 第四個參數:安全屬性指標。 第五個參數:建立選項。 第六個參數:檔案屬性。 第七個參數:用於複製檔案控制代碼。 該函數用於用戶端開啟Mailslot。寫入郵槽: BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped); 第一個參數:檔案控制代碼。 第二個參數:資料緩衝區指標。 第三個參數:寫入位元組數。 第四個參數:返回實際寫入位元組數。 第五個參數:結構體指標,一般置NULL。 該函數用於用戶端向Mailslot寫入資料。
4.牛刀小試 : 先在VC6.0中運行服務端程式,在運行用戶端程式:
運行效果:
Mailslot服務端:Mailslot用戶端: