我們平時寫程序和用終端輸入命令的時候,常常會用到管道,比如,在一段程序中,你可能會這樣寫
int fd[2]; pipe(fd)
這時,我們就創建了一個管道,實現了進程之間的通信。
再比如,我們用終端的時候,我們可能會這樣輸入命令: ls -la | grep test
我們也是在兩個命令之間創建了一個管道。
這篇文章介紹一個函數,用來創建管道的函數:popen
首先,我們先看看 man page 給的函數原型:
#include
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
下面看看一段測試程序:
/* * popen_main.c * * Created on: 2013年11月28日 * Author: DLUTBruceZhang */ #include#include #include #define MAX_BUF_LEN 4096 int main(int argc, char **argv, char **environ) { char *buf = NULL; buf = (char*)malloc(sizeof(char) * MAX_BUF_LEN); FILE *file = popen("ls -la", "r"); /*子進程執行 ls -la ,並把輸出寫入管道中*/ memset(buf, 0, sizeof(buf)); while (!feof(file)) { fgets(buf, MAX_BUF_LEN, file); /*另一個進程讀取管道中的內容*/ printf("%s", buf); } pclose(file); free(buf); return 0; }
總用量 32 drwxrwxr-x 3 administrator administrator 4096 2013-11-28 09:58 . drwxrwxr-x 13 administrator administrator 4096 2013-11-28 09:58 .. -rw-rw-r-- 1 administrator administrator 10812 2013-11-28 09:58 .cproject drwxrwxr-x 2 administrator administrator 4096 2013-11-28 10:05 Debug -rw-rw-r-- 1 administrator administrator 487 2013-11-28 10:05 popen_main.c -rw-rw-r-- 1 administrator administrator 762 2013-11-28 09:58 .project -rw-rw-r-- 1 administrator administrator 762 2013-11-28 09:58 .project