Linux popen函式的使用總結
阿新 • • 發佈:2019-01-22
函式原型:
#include “stdio.h”
FILE *popen( const char* command, const char* mode )
引數說明:
command: 是一個指向以 NULL 結束的 shell 命令字串的指標。這行命令將被傳到 bin/sh 並使用 -c 標誌,shell 將執行這個命令。
mode: 只能是讀或者寫中的一種,得到的返回值(標準 I/O 流)也具有和 type 相應的只讀或只寫型別。如果 type 是 “r” 則檔案指標連線到 command 的標準輸出;如果 type 是 “w” 則檔案指標連線到 command 的標準輸入。
返回值:
如果呼叫成功,則返回一個讀或者開啟檔案的指標,如果失敗,返回NULL,具體錯誤要根據errno判斷
int pclose (FILE* stream)
引數說明:
stream:popen返回的檔案指標
返回值:
如果呼叫失敗,返回 -1
作用:
popen() 函式用於建立一個管道:其內部實現為呼叫 fork 產生一個子程序,執行一個 shell 以執行命令來開啟一個程序這個程序必須由 pclose() 函式關閉。
例子:
管道讀:先建立一個檔案test,然後再test檔案內寫入“Read pipe successfully !”
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char buf[1024] = { 0 }; if ((fp = popen("cat test", "r")) == NULL) { perror("Fail to popen\n"); exit(1); } while (fgets(buf, 200, fp) != NULL) { printf("%s\n",buf); } pclose(fp); return EXIT_SUCCESS; }
管道寫:
#include “stdio.h” #include “stdlib.h” int main() { FILE *fp; char buf[200] = {0}; if((fp = popen(“cat > test1″, “w”)) == NULL) { perror(“Fail to popen\n”); exit(1); } fwrite(“Read pipe successfully !”, 1, sizeof(“Read pipe successfully !”), fp); pclose(fp); return 0; }
執行完畢後,當前目錄下多了一個test1檔案,開啟,裡面內容為Read pipe successfully !