|   命名管道的簡單使用  時(shi)間:2017-01-05作者(zhe):華清遠見 區別于無(wu)名(ming)管(guan)道,命名(ming)管(guan)道可以(yi)用(yong)于沒(mei)有(you)親緣關系的進(jin)程之間進(jin)行通信,且命名(ming)管(guan)道在(zai)一些特(te)點上更(geng)(geng)類似于文件(jian),其具有(you)文件(jian)名(ming),文件(jian)屬(shu)性及存放路徑(jing)等信息,也就(jiu)是說利用(yong)命名(ming)管(guan)道進(jin)行操作后,我(wo)們可以(yi)在(zai)相應的路徑(jing)下查找到它,更(geng)(geng)方便編程的需要和操作,且命名(ming)管(guan)道嚴格地(di)遵循先進(jin)先出(chu)原(yuan)則(ze)。 命(ming)(ming)名(ming)管道在(zai)創(chuang)建成功后,就可以與普通(tong)(tong)文件的(de)(de)開發設置一樣了,下(xia)(xia)面通(tong)(tong)過(guo)一個例子我們來說明一下(xia)(xia)命(ming)(ming)名(ming)管道的(de)(de)使用及注意事項,假設情境:我們需要兩(liang)個進程進行數據(ju)的(de)(de)交換,那么創(chuang)建命(ming)(ming)名(ming)管道后,一個進程負責向管道內寫入數據(ju),另(ling)一個進程負責由管道讀(du)出(chu)數據(ju)。代碼段如下(xia)(xia): 
	//寫端代碼 
	int main() 
	        write(fd,"hello",6);                //進行寫端操作 
	//讀端代碼 
	int main() 
	        read(fd,str,sizeof(str));                 //進行讀取操作 上述兩個程序分別編(bian)譯(yi)鏈接成可執行程序,且同(tong)時(shi)運行于2個終端(duan)上,進(jin)行執行效果的(de)觀察。 命(ming)名管道在(zai)使(shi)用時,需要尤(you)其注意以下(xia)3點,大家(jia)可以對照(zhao)上面的(de)程(cheng)序段體會: 1、管道(dao)創(chuang)建成功后,可以(yi)(yi)(yi)像操作普通(tong)文件一(yi)樣進(jin)行操作,但是,兩個(ge)進(jin)程打開一(yi)個(ge)命名管道(dao)的時候(hou),必須(xu)分別以(yi)(yi)(yi)”只(zhi)“的方式打開,且必須(xu)相反,即一(yi)個(ge)進(jin)程以(yi)(yi)(yi)只(zhi)讀方式打開,另一(yi)進(jin)程以(yi)(yi)(yi)只(zhi)寫(xie)方式打開。 2、在終端(duan)(duan)上單獨運(yun)行寫(xie)端(duan)(duan)程序(xu)(xu)時,會發現,終端(duan)(duan)無(wu)任何反應(ying),而讀端(duan)(duan)程序(xu)(xu)一旦開始運(yun)行,則兩(liang)個程序(xu)(xu)同(tong)時結束(shu),說明命名管(guan)道只打開一端(duan)(duan)的(de)話是(shi)無(wu)法成功的(de),此時open是(shi)無(wu)法正常(chang)返回(hui)的(de),也就是(shi)說管(guan)道兩(liang)端(duan)(duan)需要同(tong)時打開,這也是(shi)命名管(guan)道的(de)一個特點。 3、寫(xie)端(duan)代碼中標記為(wei)“*”的(de)語句(ju)作用(yong)為(wei)刪(shan)除命名(ming)(ming)管(guan)道(dao),可將該句(ju)暫時注釋(shi)掉,則在程序結束后,可在當(dang)前路徑下可以(yi)(yi)找(zhao)到一個名(ming)(ming)為(wei)“fifo”的(de)文(wen)(wen)件,且其文(wen)(wen)件屬性為(wei)“p”,為(wei)管(guan)道(dao)類型文(wen)(wen)件,這也(ye)是區別于無名(ming)(ming)管(guan)道(dao)的(de)一大特(te)點(dian),使用(yong)結束后可以(yi)(yi)找(zhao)到具(ju)體文(wen)(wen)件,所(suo)以(yi)(yi)命名(ming)(ming)管(guan)道(dao)是可以(yi)(yi)應用(yong)于無親緣關系的(de)進程間的(de)。 另外,在創建(jian)管(guan)道的時候,如果指定路(lu)徑下存(cun)在一個(ge)與(yu)命名管(guan)道同(tong)名的文件,則編(bian)譯器提示命名管(guan)道未創建(jian)成功,為避免后(hou)期使用(yong)出現問題,通常在使用(yong)命名管(guan)道后(hou)予以刪除(chu)操作。 
 發表評論 
 |