C 言語でシェルコマンドの実行結果を取得する方法
C言語では、system()システムコールを使ってシェルコマンドを実行し、その戻り値を取得できます。
system()関数のプロトタイプは以下のとおりです。
int system(const char *command);
コマンド引数は、実行するシェルコマンドを指定するために使用する文字列で、system() 関数は、新しい子プロセスでそのコマンドを実行し、子プロセスの終了ステータスコードを返します。
system() 関数の戻り値でシェルコマンドの戻り値を得ることができます。-1 ならば、system() 関数の実行中にエラーが発生したことを示します。戻り値が 0 以外でゼロでない場合、コマンドは正常に実行されて子プロセスの終了ステータスが戻されます。戻り値が 0 ならば、コマンドは正常に実行されて子プロセスは正常に終了したことを示します。
下記のコードは、system()関数がシェルコマンドの実行結果をどのように取得するかを示すサンプルコードです。
#include <stdio.h>
#include <stdlib.h>
int main() {
int ret = system("ls -l"); // 执行shell命令"ls -l"
if (ret == -1) {
printf("调用system函数失败\n");
} else if (WIFEXITED(ret)) {
int exit_status = WEXITSTATUS(ret);
printf("命令正常退出,退出状态码为:%d\n", exit_status);
} else {
printf("命令异常退出\n");
}
return 0;
}
上記の例では、system(“ls -l”) で ls -l コマンドを実行し、その戻り値を ret 変数に格納しています。ret の値から、コマンドの実行状態がわかります。ret が -1 の場合、実行に失敗しています。ret が 0 の場合、コマンドは正常に終了しています。それ以外の 0 以外の値の場合、コマンドは異常終了しています。コマンドが正常に終了している場合、WEXITSTATUS マクロを使って、コマンドの終了ステータスコードを取得できます。
system()関数はコマンドの終了コードしか取得できないため、コマンドの出力結果を直接取得することはできません。コマンドの出力結果を取得したい場合は、コマンドの結果をファイルにリダイレクトし、ファイルの内容を読み込む必要があります。