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);
 }