從C/C 中的system() 指令擷取stdout
使用system() 執行系統指令時,必須擷取其輸出以進行指令進行進一步處理。 C/C 提供了多種方法來實現此目的,其中 popen() 函數成為可靠的解決方案。
popen() 函數
popen() 函數開啟來自 shell 的管道,並透過執行指定的命令來啟動進程。它會傳回一個流指標 FILE *連接到管道,啟用讀寫操作。
語法和用法
popen() 的語法如下如下:
#include <stdio.h> FILE *popen(const char *command, const char *type);
其中:
要擷取系統指令的標準輸出,請使用:
FILE *fp = popen(command, "r");
FILE *fp 表示連接到指令的標準輸出的流。然後,您可以使用 fgetc()、fgets() 或其他流操作函數來讀取輸出。
範例
char buffer[BUFSIZ]; FILE *fp = popen("ls", "r"); while (fgets(buffer, BUFSIZ, fp) != NULL) { printf("%s", buffer); } pclose(fp);
關閉管路
讀完輸出後,必須關閉管路使用 pclose()釋放關聯資源:
int status = pclose(fp);
注意: 使用 popen() 擷取 stdout 會繼承外部指令遇到的任何錯誤。考慮檢查 pclose() 的回傳值以偵測任何錯誤。
以上是如何從 C/C 中的 system() 指令擷取標準輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!