freopen(NULL, …)
C 言語の freopen 関数って第一引数を NULL にできるのね。Linux のマニュアルには書いてないから知らなかった。
freopen 関数の第一引数を NULL にすると、ストリームを同じファイルに対して開き直すことができる。例えばバイナリモードで開いたファイルをテクストモードで開き直したり、読み書き両用で開いたストリームを読み込み専用にしたりできる。またファイルの入出力単位 (バイト単位かワイド文字単位かの区別) をリセットするのにも使える。
ただし、モードの変更はどの環境でもできるというわけではない。Unix 系環境の実装では同じファイルディスクリプタを使い回すようになっており、読み込み専用ストリームを freopen(NULL, "w", …) で書き込み専用に変更しようとしてもできないことが多い。とはいえ POSIX 規格はファイルディスクリプタを使い回すことを強制していないので、使い回しをせずにファイルを開き直す実装がないとは言い切れない。
| 固定リンク

コメント