linux C程式設計 popen函式詳解

2021-05-23 09:51:54 字數 1137 閱讀 8957

#include <stdio.h

>

file *popen(const char *command, const char *type);

int pclose(file *stream);

popen()函式 用 建立管道 的 方式 啟動 乙個 程序, 並呼叫 shell. 因為 管道 是被定義成 單向的, 所以 type 引數 只能 定義成 唯讀 或者 只寫, 不能是 兩者同時, 結果流 也相應的 是 唯讀 或者 只寫.

command 引數 是 乙個 字串指標, 指向的 是 乙個 以 null 結束符 結尾的字串, 這個 字串 包含 乙個 shell 命令. 這個命令 被送到 /bin/sh 以-c引數 執行, 即由 shell 來執行. type 引數 也是 乙個 指向 以 null 結束符 結尾的 字串的指標, 這個字串 必須是 'r' 或者 'w』 來指明 是 讀還是寫.

popen()函式 的 返回值 是 乙個 普通的 標準i/o流, 它只能用pclose()函式 來關閉, 而不是fclose(). 函式. 向 這個流 的 寫入 被轉化為 對 command 命令的 標準輸入; 而 command 命令的 標準輸出 則是和 呼叫popen(), 函式 的 程序 相同,除非 這個 被command命令 自己 改變. 相反的, 讀取 乙個 「被popen了的」 流, 就相當於 讀取 command 命令的 標準輸出, 而 command 的 標準輸入 則是和 呼叫popen, 函式的 程序 相同.

注意,popen函式的 輸出流 預設是 被全緩衝的.

pclose函式 等待 相關的程序 結束 並返回 乙個 command 命令的 退出狀態, 就像wait4函式 一樣

示例:

popen函式相關

用popen函式可以獲得命令的輸出資訊,可以輸入資訊來和程式互動 比如,我用7z程式壓縮了檔案,壓縮後,原檔案可以認為沒用了。應當刪掉,如果壓縮包有問題,但是原檔案又刪掉了,很顯然不行,我們應當先測試壓縮包是否正常,如果正常,就刪掉原檔案,否則,重新壓縮,那麼,用命令測試原檔案,就需要popen命令...

Linux C程式設計 exec函式簇

exec函式簇 在 linux 中程序要使用exec函式族 來啟動另乙個程式的執行 系統呼叫execve 對當前程序進行替換,替換者為乙個指定的程式,其引數包括檔名 filename 引數列表 argv 以及環境變數 envp exec函式族當然不止乙個,但它們大致相同,在 linux中,它們分別是...

linux c 程式設計 exec函式族

1.描述 exec 函式族將當前程序映像替換為新的程序映像,程序id不變。2.規律 exec函式族名字很相近,使用起來也很相近,它們的一般規律如下 l list 命令列引數列表 p path 搜素file時使用path變數 v vector 使用命令列引數陣列 e environment 使用環境變...