![]() |
|||||||||||||||||||||||||
標(biāo)準(zhǔn)流管道 |
|||||||||||||||||||||||||
本文關(guān)鍵字: linux 管道通信,linux 進(jìn)程通信方式 ,標(biāo)準(zhǔn)流管道 1.標(biāo)準(zhǔn)流管道函數(shù)說(shuō)明 與Linux的文件操作中有基于文件流的標(biāo)準(zhǔn)I/O操作一樣,管道的操作也支持基于文件流的模式。這種基于文件流的管道主要是用來(lái)創(chuàng)建一個(gè)連接到另一個(gè)進(jìn)程的管道,這里的“另一個(gè)進(jìn)程”也就是一個(gè)可以進(jìn)行一定操作的可執(zhí)行文件,例如,用戶執(zhí)行“l(fā)s -l”或者自己編寫(xiě)的程序“./pipe”等。由于這類操作很常用,因此標(biāo)準(zhǔn)流管道就將一系列的創(chuàng)建過(guò)程合并到一個(gè)函數(shù)popen()中完成。它所完成的工作有以下幾步: ● 創(chuàng)建一個(gè)管道。 這個(gè)函數(shù)的使用可以大大減少代碼的編寫(xiě)量,但同時(shí)也有一些不利之處。例如,它不如前面管道創(chuàng)建的函數(shù)那樣靈活多樣,并且用popen()創(chuàng)建的管道必須使用標(biāo)準(zhǔn)I/O函數(shù)進(jìn)行操作,但不能使用前面的read()、write()一類不帶緩沖的I/O函數(shù)。 與之相對(duì)應(yīng),關(guān)閉用popen()創(chuàng)建的流管道必須使用函數(shù)pclose()。該函數(shù)關(guān)閉標(biāo)準(zhǔn)I/O流,并等待命令執(zhí)行結(jié)束。 2.函數(shù)格式 popen()和pclose()函數(shù)語(yǔ)法要點(diǎn)如表1和表2所示。 表1 popen()函數(shù)語(yǔ)法要點(diǎn)
表2 pclose()函數(shù)語(yǔ)法要點(diǎn)
3.使用實(shí)例 在該實(shí)例中,使用popen()來(lái)執(zhí)行“ps -ef”命令。可以看出,popen()函數(shù)的使用能夠使程序變得短小精悍。 /* standard_pipe.c */ 下面是該程序在目標(biāo)板上的執(zhí)行結(jié)果。 $ ./standard_pipe 本文選自華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)教材《從實(shí)踐中學(xué)嵌入式Linux應(yīng)用程序開(kāi)發(fā)》 熱點(diǎn)鏈接:
1、無(wú)名管道系統(tǒng)調(diào)用 |