亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人


標(biāo)準(zhǔn)流管道

分享到:
           

    本文關(guān)鍵字: linux 管道通信,linux 進(jìn)程通信方式 ,標(biāo)準(zhǔn)流管道

    1.標(biāo)準(zhǔn)流管道函數(shù)說明

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

    ● 創(chuàng)建一個管道。
    ● fork()一個子進(jìn)程。
    ● 在父子進(jìn)程中關(guān)閉不需要的文件描述符。
    ● 執(zhí)行exec函數(shù)族調(diào)用。
    ● 執(zhí)行函數(shù)中所指定的命令。

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

    與之相對應(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ù)語法要點(diǎn)如表1和表2所示。

表1 popen()函數(shù)語法要點(diǎn)

所需頭文件 #include <stdio.h>
函數(shù)原型 FILE *popen(const char *command, const char *type)
函數(shù)傳入值 command:指向的是一個以null結(jié)束符結(jié)尾的字符串,這個字符串包含一個shell命令,并被送到/bin/sh以-c參數(shù)執(zhí)行,即由shell來執(zhí)行
type “r”:文件指針連接到command的標(biāo)準(zhǔn)輸出,即該命令的結(jié)果產(chǎn)生輸出
“w”:文件指針連接到command的標(biāo)準(zhǔn)輸入,即該命令的結(jié)果產(chǎn)生輸入
函數(shù)返回值 成功:文件流指針
出錯:-1

表2 pclose()函數(shù)語法要點(diǎn)

所需頭文件 #include <stdio.h>
函數(shù)原型 int pclose(FILE *stream)
函數(shù)傳入值 stream:要關(guān)閉的文件流
函數(shù)返回值 成功:返回由popen()所執(zhí)行的進(jìn)程的退出碼
出錯:-1

    3.使用實(shí)例

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

    /* standard_pipe.c */
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #define BUFSIZE 1024

    int main()
    {
        FILE *fp;
        char *cmd = "ps -ef";
        char buf[BUFSIZE];

        if ((fp = popen(cmd, "r")) == NULL) /* 調(diào)用popen()函數(shù)執(zhí)行相應(yīng)的命令 */
        {
            printf("Popen error\n");
            exit(1);
        }
        while ((fgets(buf, BUFSIZE, fp)) != NULL)
        {
            printf("%s",buf);
        }
        pclose(fp);
        exit(0);
    }

    下面是該程序在目標(biāo)板上的執(zhí)行結(jié)果。

    $ ./standard_pipe
    PID TTY        Uid        Size  State  Command
    1              root       1832   S     init
    2              root        0     S     [keventd]
    …
    74             root       1284   S     ./standard_pipe
    75             root       1836   S     sh -c ps -ef
    76             root       2020   R     ps –ef

    本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實(shí)踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》

   熱點(diǎn)鏈接:

   1、無名管道系統(tǒng)調(diào)用
   2、Linux下進(jìn)程間通信方式-管道
   3、Linux下進(jìn)程間通信
   4、實(shí)驗(yàn):編寫守護(hù)進(jìn)程
   5、實(shí)驗(yàn):編寫多進(jìn)程程序

更多新聞>> 

主站蜘蛛池模板: 久操免费在线观看 | 欧美线观看免费欧洲爱做网站 | 另类调教| youjizz日本xxxxhd youjizz日本人 | 日本视频二区 | 久久久久久久久久久大尺度免费视频 | 欧美一区二区三区在线播放 | 国产网红福利 | 日本在线免费看片 | 国产一级毛片卡 | 欧美午夜影视 | 日本免费成人 | 人人爰人人人人人鲁 | 男女的激情免费视频高清 | 国产精品福利一区 | 国产亚洲精品国看不卡 | 清清草视频在线观看 | 欧美一区二区三区精品国产 | 美女网站免费久久久久久久 | 久久久久久久久a免费 | 国产精品九九久久精品女同 | 欧美视频一区 | 日本三级在线播放线观看2021 | 国产精品无码制服丝袜 | 欧洲女同免费视频网站 | 久久精品人人做人人看 | 亚洲国产成人在线 | 久久伊人精品一区二区三区 | 久久美女精品 | 免费看h的网站 | 久久九九99热这里只有精品 | 91久久澡人人爽人人添 | 亚洲haose在线观看 | a网站在线观看免费网站 | 亚洲日本网站 | 韩国三日本三级中文字幕 | 久久亚洲美女久久久久 | 女人aaaaa片一级一毛片 | 日本不卡一区视频 | 日本xxxx在线| 精品视频一区二区三区在线观看 |