ホームページ > バックエンド開発 > C++ > C/C で system() コマンドから stdout をキャプチャするにはどうすればよいですか?

C/C で system() コマンドから stdout をキャプチャするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-10 02:51:09
オリジナル
886 人が閲覧しました

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

C/C での system() コマンドからの標準出力のキャプチャ

system() を使用してシステム コマンドを実行する際には、次のことが不可欠になります。さらに処理するためにその出力をキャプチャします。 C/C は、これを実現するためのさまざまなアプローチを提供しており、信頼できるソリューションとして登場しているのが、popen() 関数です。

popen() 関数

popen() 関数が開きますシェルからパイプを呼び出し、指定されたコマンドを実行してプロセスを起動します。これは、パイプに接続されたストリーム ポインタ FILE を返し、読み取りおよび書き込み操作を可能にします。

構文と使用法

popen() の構文は次のとおりです。

#include <stdio.h>

FILE *popen(const char *command, const char *type);
ログイン後にコピー

ここで:

  • command は、実行されるシステム コマンドです。
  • typeパイプへの接続のタイプを指定します。読み取りの場合は「r」、読み取りの場合は「w」です。

システム コマンドの stdout をキャプチャするには、次のコマンドを使用します。

FILE *fp = popen(command, "r");
ログイン後にコピー

FILE *fp は、コマンドの stdout に接続されたストリームを表します。その後、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() コマンドから stdout をキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート