命名管道的簡(jiǎn)單使用
時(shí)間:2017-01-05作者:華清遠(yuǎn)見
區(qū)別于無名管道,命名管道可以用于沒有親緣關(guān)系的進(jìn)程之間進(jìn)行通信,且命名管道在一些特點(diǎn)上更類似于文件,其具有文件名,文件屬性及存放路徑等信息,也就是說利用命名管道進(jìn)行操作后,我們可以在相應(yīng)的路徑下查找到它,更方便編程的需要和操作,且命名管道嚴(yán)格地遵循先進(jìn)先出原則。 命名管道在創(chuàng)建成功后,就可以與普通文件的開發(fā)設(shè)置一樣了,下面通過一個(gè)例子我們來說明一下命名管道的使用及注意事項(xiàng),假設(shè)情境:我們需要兩個(gè)進(jìn)程進(jìn)行數(shù)據(jù)的交換,那么創(chuàng)建命名管道后,一個(gè)進(jìn)程負(fù)責(zé)向管道內(nèi)寫入數(shù)據(jù),另一個(gè)進(jìn)程負(fù)責(zé)由管道讀出數(shù)據(jù)。代碼段如下:
//寫端代碼
int main()
write(fd,"hello",6); //進(jìn)行寫端操作
//讀端代碼
int main()
read(fd,str,sizeof(str)); //進(jìn)行讀取操作 上述兩個(gè)程序分別編譯鏈接成可執(zhí)行程序,且同時(shí)運(yùn)行于2個(gè)終端上,進(jìn)行執(zhí)行效果的觀察。 命名管道在使用時(shí),需要尤其注意以下3點(diǎn),大家可以對(duì)照上面的程序段體會(huì): 1、管道創(chuàng)建成功后,可以像操作普通文件一樣進(jìn)行操作,但是,兩個(gè)進(jìn)程打開一個(gè)命名管道的時(shí)候,必須分別以”只“的方式打開,且必須相反,即一個(gè)進(jìn)程以只讀方式打開,另一進(jìn)程以只寫方式打開。 2、在終端上單獨(dú)運(yùn)行寫端程序時(shí),會(huì)發(fā)現(xiàn),終端無任何反應(yīng),而讀端程序一旦開始運(yùn)行,則兩個(gè)程序同時(shí)結(jié)束,說明命名管道只打開一端的話是無法成功的,此時(shí)open是無法正常返回的,也就是說管道兩端需要同時(shí)打開,這也是命名管道的一個(gè)特點(diǎn)。 3、寫端代碼中標(biāo)記為“*”的語句作用為刪除命名管道,可將該句暫時(shí)注釋掉,則在程序結(jié)束后,可在當(dāng)前路徑下可以找到一個(gè)名為“fifo”的文件,且其文件屬性為“p”,為管道類型文件,這也是區(qū)別于無名管道的一大特點(diǎn),使用結(jié)束后可以找到具體文件,所以命名管道是可以應(yīng)用于無親緣關(guān)系的進(jìn)程間的。 另外,在創(chuàng)建管道的時(shí)候,如果指定路徑下存在一個(gè)與命名管道同名的文件,則編譯器提示命名管道未創(chuàng)建成功,為避免后期使用出現(xiàn)問題,通常在使用命名管道后予以刪除操作。
相關(guān)資訊
發(fā)表評(píng)論
|