您好,登錄后才能下訂單哦!
標準I/O庫提供了兩個函數popen和pclose這兩個函數,它們的功能是創建一個連接到另一個進程的管道,然后讀其輸出或向其輸入端發送數據。先fork一個子進程,關閉未使用的管道端。
popen() 函數 用 創建管道 的 方式啟動一個 進程, 并調用 shell。 因為 管道是被定義成單向的, 所以 type 參數 只能定義成 只讀或者 只寫, 不能是 兩者同時, 結果流也相應的 是只讀 或者 只寫。
函數popen的原型:
FILE* POPEN(const char* cmdstring,const char* type)
若成功,返回文件指針,若出錯,返回NULL
函數popen先執行fork,然后調用exec執行cmdstring,并且返回一個文件指針,如果type是“r”,則文件指針連接到cmdstring的標準輸出,如果type是“w”,則文件指針連接到cmdstring的標準輸入。
下面是一個測試用例,簡單的用下這個函數:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main()
{
FILE *stream;
FILE *wstream;
char buf[1024];
memset(buf,'\0',sizeof(buf));
stream=popen("ls -l","r");//將”ls -a”的命令通過管道讀取(“r”)到stream
wstream=fopen("myopen.txt","w+");//新建一個可寫的文件
fread(buf,sizeof(char),sizeof(buf),stream);//將stream中的數據流讀取到buf
fwrite(buf,sizeof(char),sizeof(buf),wstream);//將buf的數據寫到wstream中
fclose(wstream);
pclose(stream);
return 0;
}
運行結果:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。