可能性の重複:
How can I run an external program from C and parse its output?C:システムコマンドを実行して出力を取得しますか?
私は、Linuxでコマンドを実行すると、テキストはそれが出力するもので返されますが、私はこのテキストが画面に印刷されたくないん。一時ファイルを作るよりもエレガントな方法がありますか?
可能性の重複:
How can I run an external program from C and parse its output?C:システムコマンドを実行して出力を取得しますか?
私は、Linuxでコマンドを実行すると、テキストはそれが出力するもので返されますが、私はこのテキストが画面に印刷されたくないん。一時ファイルを作るよりもエレガントな方法がありますか?
何らかのプロセス間通信が必要です。 pipeまたは共有バッファを使用してください。
"popen"機能が必要です。次に、コマンド "ls/etc"を実行してコンソールに出力する例を示します。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
char path[1035];
/* Open the command for reading. */
fp = popen("/bin/ls /etc/", "r");
if (fp == NULL) {
printf("Failed to run command\n");
exit(1);
}
/* Read the output a line at a time - output it. */
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
/* close */
pclose(fp);
return 0;
}
stderrをstdoutにリダイレクトするとよいでしょう。そうすれば、エラーを捕捉できます。 –
stderrをstdoutにリダイレクトする方法はありますか? –
あなたは 'sizeof(path)-1'ではなく、' fgets(path、sizeof(path)、fp) 'を使うべきです。マニュアルを読む – user102008
通常、コマンドが外部プログラムであれば、ここでお手伝いすることができます。
command > file_output.txt
だからあなたのCコードは、次にあなたがfile_output.txtファイルを使用することができます
exec("command > file_output.txt");
のようなものをやっているでしょう。
ポスターは、一時ファイルの使用を明示的に排除しましたが、場合によっては有効なアプローチです。静的ファイル名を使用しないでください。セキュアなランダムファイル名を使用するか、セキュリティ上の問題であるシンボリックリンクを開くようにしてください。 –
execに渡される引数がシェルコマンドではないため、この答えは完全に間違っています。 – Alnitak
@Alnitakしかし、これは例です。引数が実際のコマンドではないかどうかは気になります - 明らかにコマンドではない*コマンドではありませんか? –
既に繰り返し説明されています。 – dmckee
重複としてマークされていますが、指していません。私はこれが完璧な解決策だとは思わない。同時にあなたは重複していると言って、私たちにそれを指摘します。またはより良い!複製された記者の数に基づいてリダイレクトを作成する。 – erm3nda