stdout
FILE *
です 標準出力ストリームのポインタ。 dup2
ファイル記述子が必要です。また、パラメータの順序を台無しにしました。使用
dup2(file, 1);
この部分を行うためのより良い方法について。おそらくこの system
の後に標準出力を復元したいので、この方法は悪いです コールが完了します。これはさまざまな方法で行うことができます。 dup
できます どこかで dup2
それを元に戻します (そして dup
を閉じます) ペッドワン)。個人的に cat
を自分で書くのは好きではありません 他の回答で提案されている実装。 system
を使用して単一のシェル コマンドをリダイレクトすることだけが必要な場合 ファイルシステム内のファイルに、おそらく最も直接的で簡単な方法は、これを行うシェルコマンドを作成することです
system("ls -l > Result");
ただし、ユーザーが 'Result; rm -rf /*'
のようなものを指定できるため、ファイル名 (結果) がユーザー入力からのものである場合は注意が必要です。
また、セキュリティのトピックについては、ls
へのフル パスを指定することを検討する必要があります。 コメントで提案されているとおり:
system("/bin/ls -l > Result");
簡単なのは >
を使うことです 確かに:
#include <stdio.h>
int main()
{
system("ls -l > /some/file");
return 0;
}
別の方法は popen()
を使用することです 、
#include <stdio.h>
#include <stdlib.h>
main()
{
char *cmd = "ls -l";
char buf[BUFSIZ];
FILE *ptr, *file;
file = fopen("/some/file", "w");
if (!file) abort();
if ((ptr = popen(cmd, "r")) != NULL) {
while (fgets(buf, BUFSIZ, ptr) != NULL)
fprintf(file, "%s", buf);
pclose(ptr);
}
fclose(file);
return 0;
}
popen()
を使用する必要があります ライブラリ関数を呼び出し、返された FILE *
からデータのチャンクを読み取ります 好きな出力ファイルに書き込んでください。
参照。