freopen
stdout
に関連付けられているファイルを、指定したファイルに変更します。
void freopen(const char pathname, ...)
通常、freopen
関数はデータ記録関数であり、stdout
に関連付けられているファイルをprintf
形式の引数で指定されたファイルに変更します。
""
文字列が使用されている場合、出力は再度stdout
にリストアされます。
freopen
関数はデータ記録関数であることに加えて、任意のファイルを上書きできるため、破壊的でもあります。
例7-17 指定したファイルに書き込むためにfreopenを使用し、システム・コールを記録する方法
プラグマを使用してスクリプトを開き、DTraceで破壊的関数を有効にします。かわりに、この行を削除し、dtrace -wを使用してスクリプトを実行することもできます。freopen
関数は、ファイル・システム上のファイルに書き込み、既存のファイルを上書きする可能性があるため、破壊的です。この例では、プログラムの実行中にmkdir
システム・コールを行うプロセス名を追跡する、一時ログ・ファイルを作成します。
#pragma D option destructive
dtrace:::BEGIN
{
freopen("/tmp/dlog");
}
syscall:vmlinux:mkdir:entry
{
printf("%Y-> %s \n",walltimestamp,execname);
}