首頁 >後端開發 >C++ >如何從 C/C 中的 system() 指令擷取標準輸出?

如何從 C/C 中的 system() 指令擷取標準輸出?

Linda Hamilton
Linda Hamilton原創
2024-12-10 02:51:09919瀏覽

How Can I Capture stdout from a system() Command in C/C  ?

從C/C 中的system() 指令擷取stdout

使用system() 執行系統指令時,必須擷取其輸出以進行指令進行進一步處理。 C/C 提供了多種方法來實現此目的,其中 popen() 函數成為可靠的解決方案。

popen() 函數

popen() 函數開啟來自 shell 的管道,並透過執行指定的命令來啟動進程。它會傳回一個流指標 FILE *連接到管道,啟用讀寫操作。

語法和用法

popen() 的語法如下如下:

#include <stdio.h>

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

其中:

  • command 是要執行的系統指令。
  • type指定管道的連接類型:「r」表示讀取,「w」表示

要擷取系統指令的標準輸出,請使用:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn