【IPC進程間通訊之二】管道Pipe

來源:互聯網
上載者:User

IPC處理序間通訊+管道Pipe              IPC(Inter-Process Communication,處理序間通訊)。        管道用於進程間共用資料,其實質是共用記憶體,常用IPC之一。管道不僅可以用於本機處理序間通訊,還可實現跨網路處理序間通訊,如同Socket通訊,管道同樣封裝電腦底層網路實現,提供一個良好的API介面。              1.管道(Pipe):
       管道分為匿名管道和具名管道。       匿名管道只能用於父子處理序間通訊 ,不能跨網路通訊,並且通訊是單向。       具名管道可用於任意處理序間通訊,支援跨網路通訊,並且通訊是雙向,任意一段都可以接收和發送資料。具名管道是學習的重點。       具名管道通訊進程分為服務端和用戶端,服務端建立Pipe,用戶端通過管道名串連該Pipe之後,雙方均可通過該Pipe發送和接收資料。               2.郵槽命名 :       本機上格式:\\ServerName\Pipe\name       如:\\.\Pipe\my_pipe
       3.基本API函數 :建立具名管道:        HANDLE    CreateNamedPipe(
                        LPCTSTR   lpName,                // 指向管道名稱的指標
                        DWORD     dwOpenMode,       // 管道開啟模式
                        DWORD     dwPipeMode,       // 管道模式
                        DWORD     nMaxInstances,     // 最大執行個體數
                        DWORD     nOutBufferSize,   // 輸出緩衝大小
                        DWORD     nInBufferSize,       // 輸入緩衝大小
                        DWORD    nDefaultTimeOut, // 逾時設定
LPSECURITY_ATTRIBUTES lpSecurityAttributes   // 安全屬性指標
);
        該函數用於伺服器端建立具名管道。等待用戶端串連:        BOOL  ConnectNamedPipe(
                     HANDLE    hNamedPipe,        //管道控制代碼
                     LPOVERLAPPED   lpOverlapped     //設為NULL
); 
        該函數用於伺服器等待用戶端串連到管道。檢查具名管道:        BOOL  WaitNamedPipe(
                     LPCTSTR   lpNamedPipeName,  //管道名
                     DWORD     nTimeOut                  //逾時
);
         該函數用於用戶端檢查是否存在管道Pipe。開啟具名管道:        BOOL  CreateFile(                     LPCTSTR   lpFileName,
                     DWORD     dwDesiredAccess,
                     DWORD     dwShareMode,
                     LPSECURITY_ATTRIBUTES   lpSecurityAttributes,
                     DWORD    dwCreationDisposition,
                     DWORD    dwFlagsAndAttributes,
                    HANDLE    hTemplateFile
 );         第一個參數:管道名指標。         第二個參數:訪問模式。         第三個參數:共用模式。         第四個參數:安全屬性指標。         第五個參數:建立選項。         第六個參數:檔案屬性。         第七個參數:用於複製檔案控制代碼。         該函數用於開啟一個管道,並返回管道控制代碼。讀取管道:               BOOL ReadFile(
                    HANDLE    hFile,
                    LPVOID     lpBuffer,
                    DWORD    nNumberOfBytesToRead,
                    LPDOWRD    lpNumberOfBytesRead,
                    LPOVERLAPPED   lpOverlapped);
        第一個參數:管道控制代碼。        第二個參數:緩衝地址。        第三個參數:訊息的長度。        第四個參數:實際讀取的長度。        第五個參數:一般設定為NULL。        該函數用於讀取管道內資料。寫入管道:        BOOL  WriteFile(
                     HANDLE    hFile,
                     LPCVOID   lpBuffer,
                     DWORD     nNumberOfBytesToWrite,
                     LPDWORD   lpNumberOfBytesWritten,
                     LPOVERLAPPED    lpOverlapped);
         第一個參數:管道控制代碼。         第二個參數:資料緩衝區指標。         第三個參數:寫入位元組數。         第四個參數:返回實際寫入位元組數。         第五個參數:結構體指標,一般置NULL。         該函數用於用戶端向管道寫入資料。
         4.牛刀小試 :          先在VC6.0中運行服務端程式,在運行用戶端程式。
         運行效果:
伺服器程式:用戶端程式:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.