色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看


標準流管道

分享到:
           

    本文關鍵字: linux 管道通信,linux 進程通信方式 ,標準流管道

    1.標準流管道函數說明

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

    ● 創建一個管道。
    ● fork()一個子進程。
    ● 在父子進程中關閉不需要的文件描述符。
    ● 執行exec函數族調用。
    ● 執行函數中所指定的命令。

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

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

    2.函數格式

    popen()和pclose()函數語法要點如表1和表2所示。

表1 popen()函數語法要點

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

表2 pclose()函數語法要點

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

    3.使用實例

    在該實例中,使用popen()來執行“ps -ef”命令。可以看出,popen()函數的使用能夠使程序變得短小精悍。

    /* 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) /* 調用popen()函數執行相應的命令 */
        {
            printf("Popen error\n");
            exit(1);
        }
        while ((fgets(buf, BUFSIZE, fp)) != NULL)
        {
            printf("%s",buf);
        }
        pclose(fp);
        exit(0);
    }

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

    $ ./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

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接:

   1、無名管道系統調用
   2、Linux下進程間通信方式-管道
   3、Linux下進程間通信
   4、實驗:編寫守護進程
   5、實驗:編寫多進程程序

更多新聞>> 

主站蜘蛛池模板: 亚洲精品第一国产综合麻豆 | 无码中文字幕免费一区二区三区 | 日本欧美成人片AAAA | 国产亚洲精品久久久久婷婷瑜伽 | 亚洲欧美18岁网站 | 公开caoporn | 欧美日韩视频免费 | 美女脱免费看网站女同 | 在线观看国产精品日韩av | 久久国产精品嫩草影院的使用方法 | 国产精品人成在线观看 | 天噜啦精品免费视频日本免费视频 | 亚洲精品国产摄像头 | 一本一道色欲综合网中文字幕 | 亚洲一区二区三区四区五区高 | 少妇挑战3个黑人惨叫4P国语 | 日韩人妻无码一区二区三区久久99 | 麻豆传媒视频在线播放 | 无码中文人妻在线一区 | 亚洲精品伦理熟女国产一区二区 | 69精品人人槡人妻人人玩 | "日日噜噜噜夜夜爽爽狠狠视频 " | 狠狠综合久久久久尤物丿 | 久久久久免费看成人影片 | 国产剧情av一区二区三区在线观看 | 日本二区三区视频 | 日韩精品人妻系列无码AV东京 | 久久精品国产亚洲av瑜伽 | 亚洲熟妇av一区二区三区浪潮 | 最爽爱爱高潮免费视频 | 亚洲黄色网址大全 | 欧美一区二区三区红桃小说 | 中文字幕 日韩欧美 | 中文字字幕人妻中文 | 中国xxxxxxxxx18 | 精品一区二区三区无码免费视频 | 日本黄色免费大片 | 在线亚洲区 | 日日噜噜噜噜夜夜爽 | 亚洲精品国偷自产在线99人热 | 亚洲欧美日韩综合久久久久 |