フロントエンド X プログラムがあります。このプログラムでは、バックグラウンド プログラム a.out が呼び出されます。a.out にはいくつかのprintf
文章があります。標準出力が に保存されていることがわかりました~/.xsession-errors
。それは正常ですか?これらの printf コンテンツを保存したくありません。削除する以外に保存を避ける方法はありますprintf
か?
3 に答える
はい、freopen(3)
関数を使用stdout
して他のファイルにリダイレクトするか、出力が不要な場合は null デバイスにリダイレクトできます。
// Discard all further output to standard output for the duration of the
// program (or until the next call to freopen()):
stdout = freopen("/dev/null", "w", stdout);
子プログラムの起動方法によっては、stdout ストリームをリダイレクトすることもできます。で起動している場合はsystem(3)
、シェルのリダイレクトを使用できます。
system("./a.out args >/dev/null");
fork()
andペアで起動する場合はexec()
、 stdout ファイル記述子を and の間にリダイレクトしfork()
てexec()
、親プロセスで何も変更されないようにすることができます。
// Error checking omitted for expository purposes
pid_t pid = fork();
if(pid == 0)
{
// Child process
int fd = open("/dev/null", O_WRONLY);
dup2(fd, STDOUT_FILENO);
close(fd);
execve("./a.out", argv, envp);
}
いくつかの可能性がありますが、完全なリストではありません。
子プログラムを実行するときは、標準出力/エラーが bitbucket に送信されるような方法で実行します
system ("myprog >/dev/nul 2>&1");
。その子プログラムに、基本的に何もしない独自の
printf
varargs-type 関数を含めます。C ランタイム ライブラリにリンクしようとする前に関数が含まれていれば、ダミーのライブラリが優先的に使用されます。freopen
標準出力とエラーを同じ bitbucket にリダイレクトするために使用します。
オプション 2 と 3 では、子プログラムを変更する必要がありますが、これは望ましい場合と望ましくない場合があります。最初のオプションは、親プログラムを変更するだけで有効になります。