假定有一臺(tái)服務(wù)器保存著公司的秘密,我們要求只有公司的管理人員才能訪問或編輯這些秘密(高權(quán)限信息)。而在自己的工作網(wǎng)絡(luò),公司內(nèi)的每名員工都可看到網(wǎng)絡(luò)上的這臺(tái)計(jì)算機(jī)(低權(quán)限訪問)。然而,我們并不希望普通員工(低權(quán)限組)取得對機(jī)密材料的訪問權(quán)。公司要求我們開發(fā)一個(gè)數(shù)據(jù)管理系統(tǒng),此系統(tǒng)只允許一個(gè)指定的用戶組(高權(quán)限組)進(jìn)行操作。
在這種情況下,命名管道等包含ACL的數(shù)據(jù)通信系統(tǒng)可發(fā)揮作用。因?yàn)槲覀兛衫肁CL,使只有擁有特別權(quán)限的用戶(高權(quán)限組)與指定服務(wù)器發(fā)送控制信息,以此對公司的秘密進(jìn)行操作。在此要記住的一個(gè)重點(diǎn)是:將命名管道作為一種網(wǎng)絡(luò)編程方案使用時(shí),它實(shí)際上建立一個(gè)簡單的客戶機(jī)/服務(wù)器數(shù)據(jù)通信體系(通常是TCP/IP,TCP協(xié)議具有良好的穩(wěn)定性與數(shù)據(jù)安全性)。
要學(xué)習(xí)開發(fā)一組命名管道應(yīng)用(可能是一個(gè)進(jìn)程的不同線程、同一個(gè)可執(zhí)行性文件的不同實(shí)例或完全不同的程序),首先要了解命名管道的命名規(guī)范(命名協(xié)議),然后了解基本的管道類型,接著實(shí)現(xiàn)一組簡單的服務(wù)器應(yīng)用與一個(gè)客戶端應(yīng)用。然后再以它為基礎(chǔ),深入研究高級的服務(wù)器編程技術(shù),了解更復(fù)雜的通信系統(tǒng)與簡單的通信協(xié)議。
我們會(huì)對命名管道已知的所有問題及限制進(jìn)行總結(jié).
在一個(gè)程序中實(shí)現(xiàn)命名管道的創(chuàng)建與使用
此示例代碼意在體現(xiàn)出命名管道與普通管道的區(qū)別,命名管道是以一個(gè)普通文件的形式出現(xiàn)的,包括三個(gè)文件,創(chuàng)建命名管道、寫管道、讀管道
1. 創(chuàng)建命名管道
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
int main(void){
char buf[80];
int fd;
unlink("zieckey_fifo");
mkfifo("zieckey_fifo",0777);}寫命名管道代碼
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
int main(void){
int fd;
char s[]="Hello!\n";
fd=open("zieckey_fifo",O_WRONLY);
while(1){
write(fd,s,sizeof(s));
sleep(1);}
return0;
}
讀命名管道代碼
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
int main(void){
int fd;
char buf[80];
fd = open("zieckey_fifo",O_RDONLY);
while(1){
read(fd,buf,sizeof(buf));
printf("%s\n",buf);
sleep(1); }
return0;
}
命名管道(NamedPipe)是服務(wù)器進(jìn)程和一個(gè)或多個(gè)客戶進(jìn)程之間通信的單向或雙向管道。不同于匿名管道的是:命名管道可以在不相關(guān)的進(jìn)程之間和不同計(jì)算機(jī)之間使用,服務(wù)器建立命名管道時(shí)給它指定一個(gè)名字,任何進(jìn)程都可以通過該名字打開管道的另一端,根據(jù)給定的權(quán)限和服務(wù)器進(jìn)程通信。命名管道提供了相對簡單的編程接口,使通過網(wǎng)絡(luò)傳輸數(shù)據(jù)并不比同一計(jì)算機(jī)上兩進(jìn)程之間通信更困難,不過如果要同時(shí)和多個(gè)進(jìn)程通信它就力不從心了。
個(gè)人覺得,初學(xué)造價(jià)首先要學(xué)會(huì)識圖,所以先看圖集;看懂圖后才開始學(xué)習(xí)軟件算量,算量中就要對定額和計(jì)算規(guī)則熟悉,可以減少很多不必要的工作內(nèi)容;最后就計(jì)價(jià),你覺得計(jì)價(jià)征有很多到底應(yīng)該套那些定額子目,所以你就...
在我看來,最簡單直接的學(xué)習(xí)不是看,而是做 就拿一套圖紙,從頭開始做 只有在做的過程中才會(huì)發(fā)現(xiàn)問題,然后想法解決問題
答:當(dāng)拿到一套圖紙后先做GGJ2009鋼筋軟件較好,然后再做GCL2008圖形算量(當(dāng)然也可以先做GCL2008圖形算量軟件再做GGJ2009鋼筋軟件),最后做計(jì)價(jià)軟件。 要學(xué)習(xí)廣聯(lián)達(dá)軟件快可以與當(dāng)?shù)?..
在計(jì)算機(jī)編程里,命名管道是一種從一個(gè)進(jìn)程到另一個(gè)進(jìn)程用內(nèi)核對象來進(jìn)行信息傳輸。和一般的管道不同,命名管道可以被不同進(jìn)程以不同的方式方法調(diào)用(可以跨權(quán)限、跨語言、跨平臺(tái))。只要程序知道命名管道的名字,發(fā)送到命名管道里的信息可以被一切擁有指定授權(quán)的程序讀取,但對不具有制定授權(quán)的。命名管道是一種FIFO(先進(jìn)先出,F(xiàn)irst-In First-Out)對象。
在一個(gè)程序中實(shí)現(xiàn)命名管道的創(chuàng)建與使用。
#include#include #include #include intmain( void) { charbuf[80]; intfd; unlink("zieckey_fifo");mkfifo("zieckey_fifo",0777); if( fork()>0) { chars[]="Hello! "; fd=open("zieckey_fifo",O_WRONLY); write(fd,s,sizeof(s)); //close(fd); } else { fd=open("zieckey_fifo",O_RDONLY); read(fd,buf,sizeof(buf));printf("Themessagefromthepipes:%s ",buf); //close(fd); } return0; } /*執(zhí)行結(jié)果為 Themessagefromthepipes:Hello! 并且可以在程序執(zhí)行目錄生成管道文件zieckey_fifo */
此示例代碼意在體現(xiàn)出命名管道與普通管道的區(qū)別,命名管道是以一個(gè)普通文件的形式出現(xiàn)的,包括三個(gè)文件操作:創(chuàng)建命名管道、寫管道、讀管道。
1. 創(chuàng)建命名管道
#include#include #include #include intmain(void){charbuf[80];intfd;unlink("zieckey_fifo");mkfifo("zieckey_fifo",0777);}
寫命名管道代碼
#include#include #include #include intmain(void){intfd;chars[]="Hello! ";fd=open("zieckey_fifo",O_WRONLY); while (1){ write(fd,s,sizeof(s)); sleep(1); }return0;}
讀命名管道代碼
#include#include #include #include intmain(void){intfd;charbuf[80];fd=open("zieckey_fifo",O_RDONLY);while(1){read(fd,buf,sizeof(buf));printf("%s ",buf);sleep(1);}return0;}
格式:pdf
大?。?span id="zdjt5gg" class="single-tag-height">24KB
頁數(shù): 10頁
評分: 4.6
一步一步跟我學(xué)預(yù)算 第 1 章: 施工圖預(yù)算編制依據(jù)和方法 5.1.1 施工圖預(yù)算的概念和作用 1.施工圖預(yù)算的概念 施工圖預(yù)算即單位工程預(yù)算書, 是在施工圖設(shè)計(jì)完成后, 工程開工前, 根據(jù)已批準(zhǔn)的施工圖 紙,在施工方案或施工組織設(shè)計(jì)已確定的前提下, 按照國家或省市頒發(fā)的現(xiàn)行預(yù)算定額、 費(fèi) 用標(biāo)準(zhǔn)、材料預(yù)算價(jià)格等有關(guān)規(guī)定,進(jìn)行逐項(xiàng)計(jì)算工程量、套用相應(yīng)定額、進(jìn)行工料分析、 計(jì)算直接費(fèi)、并計(jì)取間接費(fèi)、計(jì)劃利潤、稅金等費(fèi)用,確定單位工程造價(jià)的技術(shù)經(jīng)濟(jì)文件。 建筑安裝工程預(yù)算包括建筑工程預(yù)算和設(shè)備及安裝工程預(yù)算。 建筑工程預(yù)算又可分為一般土建工程預(yù)算、 給排水工程預(yù)算、 暖通工程預(yù)算、 電氣照明工程 預(yù)算、構(gòu)筑物工程預(yù)算及工業(yè)管道、 電力、電信工程預(yù)算;設(shè)備及安裝工程預(yù)算又可分為機(jī) 械設(shè)備及安裝工程預(yù)算和電氣設(shè)備及安裝工程預(yù)算。 本章只討論 “一般土建工程施工圖預(yù)算 ”的編制。 2. 施工圖預(yù)算的
格式:pdf
大?。?span id="yqt4y5h" class="single-tag-height">24KB
頁數(shù): 2頁
評分: 4.8
造價(jià)系統(tǒng)學(xué)習(xí)方法 新手到底如何才能快速上手學(xué)會(huì)安裝造價(jià)呢? 安裝造價(jià)員的學(xué)習(xí),包含三個(gè)步驟: 1、首先要學(xué)會(huì)識圖 :水、電、暖通、消防工程的圖紙識圖; 2、學(xué)習(xí)算量 ,軟件算量 +手算; 3、學(xué)習(xí)計(jì)價(jià) ,列清單、套定額。 需要學(xué)習(xí)的內(nèi)容包括 從事安裝造價(jià)工作,需要具備如下技能: 4 大專業(yè): 第 1 個(gè)專業(yè):給排水 第 2 個(gè)專業(yè):強(qiáng)電(照明、插座、配電)、弱電(電視、電話、網(wǎng)絡(luò)、門禁、監(jiān) 控) 第 3 個(gè)專業(yè):消防(消火栓、噴淋) 第 4 個(gè)專業(yè):暖通(供暖、通風(fēng)空調(diào)) 4 個(gè)模塊: 第 1 個(gè)模塊:識圖、構(gòu)造 第 2 個(gè)模塊:清單、定額、手算 第 3 個(gè)模塊:廣聯(lián)達(dá)算量、計(jì)價(jià) 第 4 個(gè)模塊:編制招標(biāo)、投標(biāo)文件 安裝造價(jià)學(xué)習(xí)方法建議 ?安裝專業(yè)涉及的科目比較繁雜 其中最簡單的就是給排水和采暖,其次是電氣、通風(fēng)和空調(diào)專業(yè)。造價(jià)簡單說就 是量和價(jià)的問題。下面主要著重說下量。 ?識圖算量是基
命名管道程序設(shè)計(jì)的實(shí)現(xiàn)
1.命名管道Server和Client間通信的實(shí)現(xiàn)流程
(1)建立連接:服務(wù)端通過函數(shù)CreateNamedPipe創(chuàng)建一個(gè)命名管道的實(shí)例并返回用于今后操作的句柄,或?yàn)橐汛嬖诘墓艿绖?chuàng)建新的實(shí)例。如果在已定義超時(shí)值變?yōu)榱阋郧埃幸粋€(gè)實(shí)例管道可以使用,則創(chuàng)建成功并返回管道句柄,并用以偵聽來自客戶端的連接請求,該功能通過ConnectNamedPipe函數(shù)實(shí)現(xiàn)。
另一方面,客戶端通過函數(shù)WaitNamedPipe使服務(wù)進(jìn)程等待來自客戶的實(shí)例連接,如果在超時(shí)值變?yōu)榱阋郧?,有一個(gè)管道可以為連接使用,則WaitNamedPipe將返回True,并通過調(diào)用CreateFile或CallNamedPipe來呼叫對服務(wù)端的連接。此時(shí)服務(wù)端將接受客戶端的連接請求,成功建立連接,服務(wù)端ConnectNamedPipe返回True,客戶端CreateFile將返回一指向管道文件的句柄。
從時(shí)序上講,首先是客戶端通過WaitNamedPipe使服務(wù)端的CreateFile在限時(shí)時(shí)間內(nèi)創(chuàng)建實(shí)例成功,然后雙方通過ConnectNamedPipe和CreateFile成功連接,并返回用以通信的文件句柄,此時(shí)雙方即可進(jìn)行通信。
(2)通信實(shí)現(xiàn):建立連接之后,客戶端與服務(wù)器端即可通過ReadFile和WriteFile,利用得到的管道文件句柄,彼此間進(jìn)行信息交換。
(3)連接終止:當(dāng)客戶端與服務(wù)端的通信結(jié)束,或由于某種原因一方需要斷開時(shí),客戶端應(yīng)調(diào)用CloseFile,而服務(wù)端應(yīng)接著調(diào)用DisconnectNamedPipe。當(dāng)然服務(wù)端亦可通過單方面調(diào)用DisconnectNamedPipe終止連接。最后應(yīng)調(diào)用函數(shù)CloseHandle來關(guān)閉該管道。
命名管道服務(wù)器端和客戶端代碼實(shí)現(xiàn)
客戶端
HANDLE CltHandle;
char pipenamestr[30];
sprintf(pipenamestr,″\\servername\pipe\pipename″)
if (WaitNamedPipe( pipenamestr, NMPWAIT—WAIT—FOREVER)==FALSE
// 管道名要遵循UNC,格式為\ \.\pipe\pipname,名字不分大小寫。
AfxMessageBox(″操作失敗,請確定服務(wù)端正確建立管道實(shí)例!″);
Else
CltHandle=CreateFile(pipenamestr, GENERIC—READ|GENERIC—WRITE, FILE—SHARE—READ| FILE—SHARE—WRITE,NULL, OPEN—EXISTING,
//為了與命名管道連接,此參數(shù)應(yīng)一直為OPEN—EXISTING
FILE—ATTRIBUTE—ARCHIVE|FILE—FLAG—WRITE—THROUGH,
// FILE—FLAG—WRITE—THROUGH會(huì)使管道WriteFile調(diào)用處于阻塞狀態(tài),直到數(shù)據(jù)傳送成功。
NULL);
If (CltHandle== INVALID—HANDLE—VALUE)
AfxMessageBox(″管道連接失敗″);
Else
DoUsertTransactInfo();
//執(zhí)行用戶自定義信息交換函數(shù)——從管道讀、寫信息。
……
服務(wù)端
HANDLE SvrHandle;
char pipenamestr[30];
sprintf(pipenamestr,″\\.\pipe\pipename″)
SvrHandle=CreateNamedPipe(pipenamestr,
PIPE—ACCESS—DUPLEX|FILE—FLAG—WRITE—THROUGH,
//阻塞模式,這種模式僅對″字節(jié)傳輸管道″操作有效。
FILE—WAIT|PIPE—TYPE—BYTE,
//字節(jié)模式
PIPE—UNLIMITED—INSTANCES,
128,128,
NULL,NULL);
// SECURITY—ATTRIBUTES結(jié)構(gòu)指針,描述一個(gè)新管道,確定子進(jìn)程的繼承權(quán),如果為NULL則該命名管道不能被繼承。
If (SvrHandle==INVALID—HANDLE—VALUE)
AfxMessageBox(″管道創(chuàng)建失敗,請確定客戶端提供連接可能!″);
Else
If (ConnectNamedPipe(SvrHandle,NULL)==FALSE)
AfxMessageBox(″建立連接失敗!″);
Else
DoUsertTransactInfo();
//用戶自定義信息交換函數(shù)
……
使用靈活性
命名管道具有很好的使用靈活性,表現(xiàn)在:
1) 既可用于本地,又可用于網(wǎng)絡(luò)。
2) 可以通過它的名稱而被引用。
3) 支持多客戶機(jī)連接。
4) 支持雙向通信。
5) 支持異步重疊I/O操作。
不過,當(dāng)前只有Windows NT支持服務(wù)端的命名管道技術(shù)。
命名管道是由服務(wù)器端的進(jìn)程建立的,管道的命名必須遵循特定的命名方法,就是 "\\.\pipe\管道名",當(dāng)作為客戶端的進(jìn)程要使用時(shí),使用"\\計(jì)算機(jī)名\\pipe\管道名" 來打開使用,具體步驟如下:
服務(wù)端通過函數(shù) CreateNamedPipe 創(chuàng)建一個(gè)命名管道的實(shí)例并返回用于今后操作的句柄,或?yàn)橐汛嬖诘墓艿绖?chuàng)建新的實(shí)例。 服務(wù)端偵聽來自客戶端的連接請求,該功能通過 ConnectNamedPipe 函數(shù)實(shí)現(xiàn)。 客戶端通過函數(shù) WaitNamedPipe 來等待管道的出現(xiàn),如果在超時(shí)值變?yōu)榱阋郧埃幸粋€(gè)管道可以使用,則 WaitNamedPipe 將返回 True,并通過調(diào)用 CreateFile 或 CallNamedPipe 來呼叫對服務(wù)端的連接。 此時(shí)服務(wù)端將接受客戶端的連接請求,成功建立連接,服務(wù)端 ConnectNamedPipe 返回 True 建立連接之后,客戶端與服務(wù)器端即可通過 ReadFile 和 WriteFile,利用得到的管道文件句柄,彼此間進(jìn)行信息交換。 當(dāng)客戶端與服務(wù)端的通信結(jié)束,客戶端調(diào)用 CloseFile,服務(wù)端接著調(diào)用 DisconnectNamedPipe。最后調(diào)用函數(shù)CloseHandle來關(guān)閉該管道。 由于命名管道使用時(shí)作為客戶端的程序必須知道管道的名稱,所以更多的用在同一"作者"編寫的服務(wù)器/工作站程序中,你不可能隨便找出一個(gè)程序來要求它和你寫的程序來通過命名管道通信。而匿名管道的使用則完全不同,它允許你和完全不相干的進(jìn)程通信,條件是這個(gè)進(jìn)程通過控制臺(tái)"console"來輸入輸出,典型的例子是老的 Dos 應(yīng)用程序,它們在運(yùn)行時(shí) Windows 為它們開了個(gè) Dos 窗口,它們的輸入輸出就是 console 方式的。還有一些標(biāo)準(zhǔn)的 Win32 程序也使用控制臺(tái)輸入輸出,如果在 Win32 編程中不想使用圖形界面,你照樣可以使用 AllocConsole 得到一個(gè)控制臺(tái),然后通過 GetStdHandle 得到輸入或輸出句柄,再通過 WriteConsole 或 WriteFile 把結(jié)果輸出到控制臺(tái)(通常是一個(gè)象 Dos 窗口)的屏幕上。雖然這些程序看起來象 Dos 程序,但它們是不折不扣的 Win32 程序,如果你在純 Dos 下使用,就會(huì)顯示"The program must run under Windows!"。
一個(gè)控制臺(tái)有三個(gè)句柄:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和和標(biāo)準(zhǔn)錯(cuò)誤句柄,標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出句柄是可以重新定向的,你可以用匿名管道來代替它,這樣一來,你可以在管道的另一端用別的進(jìn)程來接收或輸入,而控制臺(tái)一方并沒有感到什么不同,就象 Dos 下的 > 或者 < 可以重新定向輸出或輸入一樣。通??刂婆_(tái)程序的輸入輸出如下:
(控制臺(tái)進(jìn)程output) write ----> 標(biāo)準(zhǔn)輸出設(shè)備(一般是屏幕)
(控制臺(tái)進(jìn)程input) read <---- 標(biāo)準(zhǔn)輸入設(shè)備(一般是鍵盤)
而用管道代替后:
(作為子進(jìn)程的控制臺(tái)進(jìn)程output) write ----> 管道1 ----> read (父進(jìn)程)
(作為子進(jìn)程的控制臺(tái)進(jìn)程input) read <----> 管道2 <---- write (父進(jìn)程)
使用匿名管道的步驟如下:
使用 CreatePipe 建立兩個(gè)管道,得到管道句柄,一個(gè)用來輸入,一個(gè)用來輸出 準(zhǔn)備執(zhí)行控制臺(tái)子進(jìn)程,首先使用 GetStartupInfo 得到 StartupInfo 使用第一個(gè)管道句柄代替 StartupInfo 中的 hStdInput,第二個(gè)代替 hStdOutput、hStdError,即標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄 使用 CreateProcess 執(zhí)行子進(jìn)程,這樣建立的子進(jìn)程輸入和輸出就被定向到管道中 父進(jìn)程通過 ReadFile 讀第二個(gè)管道來獲得子進(jìn)程的輸出,通過 WriteFile 寫第一個(gè)管道來將輸入寫到子進(jìn)程 父進(jìn)程可以通過 PeekNamedPipe 來查詢子進(jìn)程有沒有輸出 子進(jìn)程結(jié)束后,要通過 CloseHandle 來關(guān)閉兩個(gè)管道。 下面是具體的說明和定義:
1. 建立匿名管道使用 CreatePipe 原形如下:
BOOL CreatePipe(
PHANDLE hReadPipe, // address of variable for read handle
PHANDLE hWritePipe, // address of variable for write handle
LPSECURITY_ATTRIBUTES lpPipeAttributes, // pointer to security attributes
DWORD nSize // number of bytes reserved for pipe
);
當(dāng)管道建立后,結(jié)構(gòu)中指向的 hReadPipe 和 hWritePipe 可用來讀寫管道,當(dāng)然由于匿名管道是單向的,你只能使用其中的一個(gè)句柄,參數(shù)中的 SECURITY_ATTRIBUTES 的結(jié)構(gòu)必須填寫,定義如下:
typedef struct_SECURITY_ATTRIBUTES{
DWORD nLength: //定義以字節(jié)為單位的此結(jié)構(gòu)的長度
LPVOID lpSecurityDescriptor; //指向控制這個(gè)對象共享的安全描述符,如果為NULL這個(gè)對象將被分配一個(gè)缺省的安全描述
BOOL bInheritHandle; //當(dāng)一個(gè)新過程被創(chuàng)建時(shí),定義其返回是否是繼承的.供系統(tǒng)API函數(shù)使用.
}SECURITY_ATTRIBUTES;
2. 填寫創(chuàng)建子進(jìn)程用的 STARTUPINFO 結(jié)構(gòu),一般我們可以先用 GetStartupInfo 來填寫一個(gè)缺省的結(jié)構(gòu),然后改動(dòng)我們用得到的地方,它們是:
hStdInput -- 用其中一個(gè)管道的 hWritePipe 代替 hStdOutput、hStdError -- 用另一個(gè)管道的 hReadPipe 代替 dwFlags -- 設(shè)置為 STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW 表示輸入輸出句柄及 wShowWindow 字段有效 wShowWindow -- 設(shè)置為 SW_HIDE,這樣子進(jìn)程執(zhí)行時(shí)不顯示窗口。 填寫好以后,就可以用 CreateProcess 來執(zhí)行子進(jìn)程了,具體有關(guān)執(zhí)行子進(jìn)程的操作可以參考上一篇教程《進(jìn)程控制》
3. 在程序中可以用 PeekNamedPipe 查詢子進(jìn)程有沒有輸出,原形如下:
BOOL PeekNamedPipe(
HANDLE hNamedPipe, // handle to pipe to copy from
LPVOID lpBuffer, // pointer to data buffer
DWORD nBufferSize, // size, in bytes, of data buffer
LPDWORD lpBytesRead, // pointer to number of bytes read
LPDWORD lpTotalBytesAvail, // pointer to total number of bytes available
LPDWORD lpBytesLeftThisMessage // pointer to unread bytes in this message
);
我們可以將嘗試讀取 nBuffersize 大小的數(shù)據(jù),然后可以通過返回的 BytesRead 得到管道中有多少數(shù)據(jù),如果不等于零,則表示有數(shù)據(jù)可以讀取。
4. 用 ReadFile 和 WriteFile 來讀寫管道,它們的參數(shù)是完全一樣的,原形如下:
ReadFile or WriteFile(
HANDLE hFile, // handle of file to read 在這里使用管道句柄
LPVOID lpBuffer, // address of buffer that receives data 緩沖區(qū)地址
DWORD nNumberOfBytesToRead, // number of bytes to read 準(zhǔn)備讀寫的字節(jié)數(shù)
LPDWORD lpNumberOfBytesRead, // address of number of bytes read,實(shí)際讀到的或?qū)懭氲淖止?jié)數(shù)
LPOVERLAPPED lpOverlapped // address of structure for data 在這里用 NULL
);
5. 用 CloseHandle 關(guān)閉管道一和管道二的 hReadPipe和 hWritePipe 這四個(gè)句柄。
下面給出了一個(gè)例子程序,這個(gè)程序是上篇教程《進(jìn)程控制》的例子的擴(kuò)充,如果你對有的 api 感到陌生的話,請先閱讀上一篇教程。