管道和FIFO(二)

popen和pclose函數:函數

這兩個函數是標準I/O庫裏的。code

#include <stdio.h>進程

FILE *popen(const char *command, const char *type)get

int pclose(FILE *stream)string

描述:它建立另外一個進程,在進程中執行command命令,而後根據type類型,it

若是是「r」,那麼調用進程讀進command的標準輸出。io

若是是「w」,那麼調用進程寫到command的標準輸入。class

例子:stream

/*從標準輸入讀經一個文件名,隨後構建一個命令,並把它傳遞給popen,
而後將這個命令的輸出複製到標準輸出上*/
//mainpopen.c
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 1000

int main(int argc, char **argv)
{
    size_t n;
    char buff[MAXLINE], command[MAXLINE];
    FILE *fp;

    fgets(buff, MAXLINE, stdin);//從標準輸入獲取路徑名
    n = strlen(buff);
    if (buff[n-1] == '\n')//剔除換行符
        n--;
    snprintf(command, sizeof(command), "cat %s", buff);//構建命令
    fp = popen(command, "r");//這個命令的輸出將作爲一個流輸出出去
    
    while (fgets(buff, MAXLINE, fp) != NULL)//將這個輸出流讀進buff去
        fputs(buff, stdout);//複製到標準輸出去。
    pclose(fp);
    exit(0);
}
相關文章
相關標籤/搜索