freopen
stdoutに関連付けられているファイルを、指定したファイルに変更します。
void freopen(const char pathname, ...)
通常、freopen関数はデータ記録関数であり、stdoutに関連付けられているファイルをprintf形式の引数で指定されたファイルに変更します。
""文字列が使用されている場合、出力は再度stdoutにリストアされます。
freopen関数はデータ記録関数であることに加えて、任意のファイルを上書きできるため、破壊的でもあります。
例8-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);
}