Windows管道技術簡述

來源:互聯網
上載者:User

不知你是否用過這樣的程式,他們本身並沒有解壓縮的功能,而是調用DOS程式PKZIP完成ZIP包的解壓縮。但是在程式運行時又沒有DOS控制台的視窗出現而且一切本應該在DOS下顯示的資訊都出現在了那個安裝程式的一個文字框裡。這種設計既美觀又可以防止少數眼疾手快的使用者提前關了你的DOS視窗。

現在就來討論一下,如何用匿名管道技術實現這個功能。

管道技術由來已久,相信不少人對DOS命令裡的管道技術最為熟悉。當我們type一個檔案的時候如果想讓他分頁現實可以輸入

C:\>type autoexec.bat|more

這裡“|”就是管道操作符。他以type輸出的資訊為讀取端,以more的輸入端為寫入端建立的管道。

Windows中使用較多的管道也是匿名管道,它通過API函數CreatePipe建立。

BOOL CreatePipe(
PHANDLE hReadPipe, // 指向讀端控制代碼的指標
PHANDLE hWritePipe, // 指向寫端控制代碼的指標
LPSECURITY_ATTRIBUTES lpPipeAttributes, // 指向安全屬性結構的指標
DWORD nSize // 管道的容量
);

上面幾個參數中要注意hReadPipe,hWritePipe是指向控制代碼的指標,而不是控制代碼(我第一次用的時候就搞錯了)。nSize一般指定為0,以便讓系統自己決定管道的容量。現在來看安全屬性結構,SECURITY_ATTRIBUTES。

typedef struct _SECURITY_ATTRIBUTES { // sa
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES;

nLength是結構體的大小,自然是用sizeof取得了。lpSecurityDescriptor是安全性描述元(一個C-Style的字串)。bInheritHandle他指出了安全描述的對象能否被新建立的進程繼承。先不要管他們的具體意義,使用的時候自然就知道了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.