web-dev-qa-db-ja.com

Cのstdoutからシステムコマンドの出力を取得する

システムコマンドを実行するCプログラムをAndroid/Linuxで作成しています。コマンドはいくつかのテキストをstdoutに出力し、出力を文字列または文字配列にキャプチャしようとしています。

例えば:

system("ls");

現在のディレクトリの内容をstdoutにリストし、そのデータをプログラムでCの変数にキャプチャできるようにしたいと思います。

どうすればよいですか?

ありがとう。

16
user1118764

popenを使用します。 fopenのようなストリームを返します。ただし、pcloseでストリームを閉じる必要があります。これは、pcloseが子プロセスの起動に関連するリソースのクリーンアップを処理するためです。

FILE *ls = popen("ls", "r");
char buf[256];
while (fgets(buf, sizeof(buf), ls) != 0) {
    /*...*/
}
pclose(ls);
18
jxh