<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程間通信之:管道

進(jìn)程間通信之:管道

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257127.htm

8.2.4標準流

1.標準流函數說(shuō)明

的文件操作中有基于文件流的標準I/O操作一樣,的操作也支持基于文件流的模式。這種基于文件流的管道主要是用來(lái)創(chuàng )建一個(gè)連接到另一個(gè)的管道,這里的“另一個(gè)”也就是一個(gè)可以進(jìn)行一定操作的可執行文件,例如,用戶(hù)執行“ls-l”或者自己編寫(xiě)的程序“./pipe”等。由于這一類(lèi)操作很常用,因此標準流管道就將一系列的創(chuàng )建過(guò)程合并到一個(gè)函數popen()中完成。它所完成的工作有以下幾步。

n 創(chuàng )建一個(gè)管道。

n fork()一個(gè)子。

n 在父子進(jìn)程中關(guān)閉不需要的文件描述符。

n 執行exec函數族調用。

n 執行函數中所指定的命令。

這個(gè)函數的使用可以大大減少代碼的編寫(xiě)量,但同時(shí)也有一些不利之處,例如,它不如前面管道創(chuàng )建的函數那樣靈活多樣,并且用popen()創(chuàng )建的管道必須使用標準I/O函數進(jìn)行操作,但不能使用前面的read()、write()一類(lèi)不帶緩沖的I/O函數。

與之相對應,關(guān)閉用popen()創(chuàng )建的流管道必須使用函數pclose()來(lái)關(guān)閉該管道流。該函數關(guān)閉標準I/O流,并等待命令執行結束。

2.函數格式

popen()和pclose()函數格式如表8.2和表8.3所示。

表8.2 popen()函數語(yǔ)法要點(diǎn)

所需頭文件

#includestdio.h>

函數原型

FILE*popen(constchar*command,constchar*type)

函數傳入值

command:指向的是一個(gè)以null結束符結尾的字符串,這個(gè)字符串包含一個(gè)shell命令,并被送到/bin/sh以-c參數執行,即由shell來(lái)執行

type:

“r”:文件指針連接到command的標準輸出,即該命令的結果產(chǎn)生輸出
“w”:文件指針連接到command的標準輸入,即該命令的結果產(chǎn)生輸入

函數返回值

成功:文件流指針

出錯:-1

表8.3 pclose()函數語(yǔ)法要點(diǎn)

所需頭文件

#includestdio.h>

函數原型

intpclose(FILE*stream)

函數傳入值

stream:要關(guān)閉的文件流

函數返回值

成功:返回由popen()所執行的進(jìn)程的退出碼

出錯:-1

3.函數使用實(shí)例

在該實(shí)例中,使用popen()來(lái)執行“ps-ef”命令??梢钥闯?,popen()函數的使用能夠使程序變得短小精悍。

/*standard_pipe.c*/

#includestdio.h>

#includeunistd.h>

#includestdlib.h>

#includefcntl.h>

#defineBUFSIZE1024

intmain()

{

FILE*fp;

char*cmd=ps-ef;

charbuf[BUFSIZE];

/*調用popen()函數執行相應的命令*/

if((fp=popen(cmd,r))==NULL)

{

printf(Popenerrorn);

exit(1);

}

while((fgets(buf,BUFSIZE,fp))!=NULL)

{

printf(%s,buf);

}

pclose(fp);

exit(0);

}

下面是該程序在目標板上的執行結果。

$./standard_pipe

PIDTTYUidSizeStateCommand

1root1832Sinit

2root0S[keventd]

3root0S[ksoftirqd_CPU0]

……

74root1284S./standard_pipe

75root1836Ssh-cps-ef

76root2020Rps–ef

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>