0
Cプログラム内からシェルコマンドを実行しようとしています。プログラムからexecの出力をパラメータ参照で返す
私は、コマンド自体の終了コードを返し、パラメータ参照変数を使用してプログラムの実際の出力を返すラッパー関数を作成しました。
exec関数のラッパーは次のようになります。
int _exec(const void *command, char **result) {
FILE *fp;
char path[1035];
char *eof;
/* Open the command for reading. */
fp = popen(command, "r");
if (fp == NULL) {
return -1;
}
while((eof = fgets(path, sizeof(path), fp)) != NULL);
/* Fill the parameter reference */
*result = strdup(path);
/* close */
pclose(fp);
return 0;
}
呼び出す部分は次のようになります。呼び出す部分で残念ながら
int result = 0;
char *tmp;
result =_exec("ls /", &tmp);
printf("%s", tmp);
、I printf
tmp
、それが唯一の最後の行が含まれている場合コマンド出力の
私が間違っていることは何ですか?すべての行を*result
のintにすると、tmp
にどうすればいいですか?
私は 'fread'を試しても全く動作しません:' fread(* result、1、sizeof(char *)、fp); ' – lockdoc
パラメータとして渡すものを知るには' fread'のドキュメントを読んでください。以前のように、最初のものは 'path'です。 'count'にはあなたのバッファのサイズ' sizeof(path) 'を渡します。それは行末を過ぎて読み取ることはありません。実際には、すべてのデータを読み取らないかのように 'while'ループは必要ありません。バッファはいっぱいになります。 – atturri
読み込む前にどの配列のサイズを宣言しなければならないのですか? – lockdoc