FIO11-C. fopen() のモード引数の指定は慎重に行う
C 言語規格は、fopen() を呼び出すときに mode に使用する具体的な文字列を定めている [ISO/IEC 9899:1999]。C 言語規格への厳密な合致と可搬性を確保するには、以下の表の文字列(C 言語規格から引用)を使用する必要がある。
fopen() のモード引数に使用する文字列
mode 文字列 | 結果 |
---|---|
r | テキストファイルを読取りモードでオープンする |
w | テキストファイルを書込みモードで生成する、または長さ 0 に切り捨てる |
a | 追加、すなわちテキストファイルをファイルの終わりの位置からの書込みモードでオープンまたは生成する |
rb | バイナリファイルを読込みモードでオープンする |
wb | バイナリファイルを書込みモードでオープンする、または長さ 0 に切り捨てる |
ab | 追加、すなわちバイナリファイルをファイルの終わりの位置からの書込みモードでオープンまたは生成する |
r+ | テキストファイルを更新(読取り及び書込み)モードでオープンする |
w+ | テキストファイルを更新モードで生成する、または長さ 0 に切り捨てる |
a+ | 追加、すなわちテキストファイルをファイルの終わりの位置からの書込みをする更新モードでオープンまたは生成する |
r+b または rb+ | バイナリファイルを更新(読取りおよび書込み)モードでオープンする |
w+b または wb+ | バイナリファイルを更新モードで生成する、または長さ 0 に切り捨てる |
a+b または ab+ | 追加、すなわちバイナリファイルをファイルの終わりの位置からの書込みをする更新モードでオープンまたは生成する |
モード文字列がこれらの文字の並びのいずれかから始まる場合、処理系は残りの文字を無視するか、それらを使用して異なる種類のファイルを選択する可能性がある。
処理系は追加のモード文字列を定義できるが、完全に可搬性があり C99 に適合しているのは、この表に記載されたモードだけである [ISO/IEC 9899:1999]。
リスク評価
処理系によって認識されないモード文字列を使用すると、fopen() の呼び出しが失敗するおそれがある。
レコメンデーション | 深刻度 | 可能性 | 修正コスト | 優先度 | レベル |
---|---|---|---|---|---|
FIO11-C | 中 | 中 | 中 | P8 | L2 |
自動検出
参考情報
- [ISO/IEC 9899:1999] Section 7.9.15.3, "The fopen function"
翻訳元
これは以下のページを翻訳したものです。
FIO11-C. Take care when specifying the mode parameter of fopen()