popen, pclose - process I/O


SYNOPSIS

#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 函數 一樣.

返回值

如果 fork(2) 或者 pipe(2) 調用 失敗, 或者 它 分配不到內存, popen 函數 返回 NULL .

如果 wait4 返回 一個 錯誤, 或者 其他什么 錯誤 發生, pclose 函數 返回 一個 -1.

錯誤

如果 內存空間 開辟 失敗, popen 函數 並不設置 errno . 如果 內部的 fork() 函數 或者 pipe() 函數 失敗, errno 則會被 適當的 設置. 如果 type 參數 是不可用的, 而且 這個 狀態 被偵測到, errno 將 被設置成 EINVAL.

如果 pclose() 函數 不能 偵測到 子進程的狀態, errno 將 被設置成 ECHILD


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM