名前空間
変種
操作

C スタイルのファイル入出力

提供: cppreference.com
< cpp‎ | io
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(非推奨)
(非推奨)
(非推奨)
同期出力
エラーカテゴリインタフェース
(C++11)
 
C スタイルの入出力
 

C++ 標準ライブラリの C の入出力のサブセットは C スタイルのストリーム入出力操作を実装します。 <cstdio> ヘッダは汎用のファイル操作のサポートを提供し、ナロー文字およびマルチバイト文字の入出力能力を持つ関数を供給し、 <cwchar> ヘッダはワイド文字の入出力能力を持つ関数を提供します。

C のストリームは std::FILE 型のオブジェクトで、 std::FILE* 型のポインタを通してのみアクセスしたり操作することができます (ノート: 有効な std::FILE* を逆参照およびコピーすることで std::FILE 型のローカルなオブジェクトを作成することは可能かもしれませんが、そのようなコピーのアドレスを入出力関数で使用することは未定義動作です)。 C のストリームのそれぞれには外部の物理デバイス (ファイル、標準入力ストリーム、プリンタ、シリアルポートなど) が紐付けられています。

C のストリームは書式なしおよび書式付き両方の入出力のために使用することができます。 これらはロケールの影響を受け、ワイド文字とマルチバイト文字の変換が必要に応じて行われる場合があります。 それぞれのストリームが独自のロケールに紐付けられている C++ のストリームと異なり、すべての C のストリームは最も最近に std::setlocale で設定された同じひとつのロケールオブジェクトにアクセスします。

デバイスにアクセスするために必要なシステム固有の情報 (POSIX のファイル記述子など) に加えて、 C のストリームオブジェクトはそれぞれ以下の情報を保持します。

1) 文字幅: 未設定、ナロー、ワイド
2) バッファリング状態: バッファリングなし、行バッファリング、完全バッファリング
3) バッファ: ユーザから提供される外部のバッファに置き換えることができます
4) 入出力モード: 入力、出力、更新 (入力と出力の両方)
5) バイナリモードとテキストモードの区別
6) ファイル終端状態指示子
7) エラー状態指示子
8) ファイル位置指示子 (std::fpos_t 型のオブジェクト)、ワイド文字ストリームではパース状態 (std::mbstate_t 型のオブジェクト) を含みます
9) (C++17) 複数のスレッドで読み書きしたりストリームの位置を設定、取得したりするときのデータ競合を避けるために使用される再入可能なロック

目次

[編集] ナロー指向とワイド指向

新たに開かれたストリームは無指向です。 std::fwide または任意の入出力関数の最初の呼び出しにより指向が確立されます。 ワイド入出力関数はストリームをワイド指向に設定し、ナロー入出力関数はストリームをナロー指向に設定します。 一度設定されると、指向は std::freopen でのみ変更できます。 ナロー入出力関数をワイド指向のストリームに対して呼ぶことはできませんし、ワイド入出力関数をナロー指向のストリームに対して呼ぶことはできません。 ワイド入出力関数は std::mbrtowc および std::wcrtomb を呼んだかのようにワイド文字とマルチバイト文字を変換します。 プログラム内で有効なマルチバイト文字列と異なり、ファイル内のマルチバイト文字列にはヌル文字が埋め込まれる場合があり、初期シフト状態で開始したり初期シフト状態で終了したりする必要はありません。

POSIX は、ストリームの指向がワイドになった時点で、現在設定されている C のロケールの LC_CTYPE ファセットをストリームオブジェクト内に格納し、それを指向が変わるまで、以降の std::setlocale の呼び出しにかからわず、そのストリームの将来のすべての入出力に使用することを要求しています。

[編集] バイナリモードとテキストモード

テキストストリームは行 (ゼロ個以上の文字と行末文字 '\n') に構成される順序付きの文字の並びです。 最終行に行末文字 '\n' が必要かどうかは処理系定義です。 文字は OS のテキスト表現の規約に沿うよう、入出力時に追加されたり変更されたり削除されたりする場合があります (特に Windows OS の C のストリームでは出力時に \n\r\n に変換され、入力時に \r\n\n に変換されます)。

テキストストリームからのデータの読み取りは、以下のすべての条件を満たす場合に限り、以前にそのストリームに書き込んだデータと等しいことが保証されます。

  • データは印刷文字および制御文字 \t および \n のみで構成されなければなりません (特に Windows OS では文字 '\0x1A' は入力を終端させます)
  • \n の直前に空白文字があってはいけません (\n の直前に書き出された空白文字は読み取り時に消える場合があります)
  • 最後の文字は \n でなければなりません

バイナリストリームは内部データを透過的に記録できる順序付きの文字の並びです。 バイナリストリームから読み取ったデータは、以前にそのストリームに書き出したデータと常に等しくなります。 処理系はストリームの最後にヌル文字をいくつか追加することだけが許されています。 ワイドバイナリストリームは初期シフト状態で終わる必要はありません。

POSIX の処理系はテキストストリームとバイナリストリームを区別しません (\n や他のいかなる文字にも特別なマッピングはありません)。

[編集] 関数

ヘッダ <cstdio> で定義
ファイルアクセス
ファイルを開きます
(関数) [edit]
既存のストリームを別の名前で開きます
(関数) [edit]
ファイルを閉じます
(関数) [edit]
出力ストリームを実際のファイルと同期させます
(関数) [edit]
ファイルストリームをワイド文字入出力とナロー文字入出力の間で切り替えます
(関数) [edit]
ファイルストリームのためのバッファを設定します
(関数) [edit]
ファイルストリームのためのバッファとそのサイズを設定します
(関数) [edit]
直接入出力
ファイルから読み込みます
(関数) [edit]
ファイルに書き込みます
(関数) [edit]
書式なし入出力
バイト/マルチバイト文字
ファイルストリームから文字を取得します
(関数) [edit]
ファイルストリームから文字列を取得します
(関数) [edit]
ファイルストリームに文字を書き込みます
(関数) [edit]
ファイルストリームに文字列を書き込みます
(関数) [edit]
stdin から文字を読み込みます
(関数) [edit]
(C++14で削除)
stdin から文字列を読み込みます
(関数) [edit]
stdout に文字を書き込みます
(関数) [edit]
stdout に文字列を書き込みます
(関数) [edit]
ファイルストリームに文字を戻します
(関数) [edit]
ワイド文字
ファイルストリームからワイド文字を取得します
(関数) [edit]
ファイルストリームからワイド文字列を取得します
(関数) [edit]
ファイルストリームにワイド文字を書き込みます
(関数) [edit]
ファイルストリームにワイド文字列を書き込みます
(関数) [edit]
stdin からワイド文字を読み込みます
(関数) [edit]
stdout にワイド文字を書き込みます
(関数) [edit]
ファイルストリームにワイド文字を戻します
(関数) [edit]
書式付き入出力
バイト/マルチバイト文字
stdin、ファイルストリームまたはバッファから書式付き入力を行います
(関数) [edit]
(C++11)(C++11)(C++11)
可変個引数リストを使用して stdin、ファイルストリームまたはバッファから書式付き入力を行います
(関数) [edit]
stdout、ファイルストリームまたはバッファに書式付き出力を行います
(関数) [edit]
可変個引数リストを使用して stdout、ファイルストリームまたはバッファに書式付き出力を行います
(関数) [edit]
ワイド文字
stdin、ファイルストリームまたはバッファから書式付きワイド文字入力を行います
(関数) [edit]
(C++11)(C++11)(C++11)
可変個引数リストを使用して stdin、ファイルストリームまたはバッファから書式付きワイド文字入力を行います
(関数) [edit]
stdout、ファイルストリームまたはバッファに書式付きワイド文字出力を行います
(関数) [edit]
可変個引数リストを使用して stdout、ファイルストリームまたはバッファに書式付きワイド文字出力を行います
(関数) [edit]
ファイル位置操作
現在のファイル位置指示子を返します
(関数) [edit]
ファイル位置指示子を取得します
(関数) [edit]
ファイル位置指示子をファイル内の指定された位置に移動させます
(関数) [edit]
ファイル位置指示子をファイル内の指定された位置に移動させます
(関数) [edit]
ファイル位置指示子をファイルの先頭に移動させます
(関数) [edit]
エラー処理
エラーをクリアします
(関数) [edit]
ファイルの終端かどうか調べます
(関数) [edit]
ファイルのエラーを調べます
(関数) [edit]
現在のエラーに対応する文字列を stderr に出力します
(関数) [edit]
ファイルに対する操作
ファイルを消去します
(関数) [edit]
ファイルの名前を変更します
(関数) [edit]
自動的に削除される一時的なファイルを開きます
(関数) [edit]
一意なファイル名を返します
(関数) [edit]

[編集]

ヘッダ <cstdio> で定義
定義
FILE C の入出力ストリームを制御するために必要なすべての情報を保持できるオブジェクト型[edit]
fpos_t ファイルの位置 (マルチバイトパース状態を含む) を一意に指定できる非配列完全オブジェクト型[edit]
sizeof 演算子によって返される符号なし整数型
(typedef) [edit]

[編集] マクロ

ヘッダ <cstdio> で定義
stdinstdoutstderr
入力ストリームに関連付けられた FILE* 型の式
出力ストリームに関連付けられた FILE* 型の式
エラー出力ストリームに関連付けられた FILE* 型の式
(マクロ定数)
EOF
負の値を持つ int 型の整数定数式
(マクロ定数)
FOPEN_MAX
同時にオープンできるファイルの最大数
(マクロ定数)
FILENAME_MAX
サポートされている最も長いファイル名を保持するために必要な char 配列のサイズ
(マクロ定数)
BUFSIZ
std::setbuf で使用されるバッファのサイズ
(マクロ定数)
_IOFBF_IOLBF_IONBF
完全バッファリングを表す std::setvbuf に渡す引数
行バッファリングを表す std::setvbuf に渡す引数
バッファリングなしを表す std::setvbuf に渡す引数
(マクロ定数)
SEEK_SETSEEK_CURSEEK_END
ファイルの先頭からシークすることを表す std::fseek に渡す引数
現在のファイル位置からシークすることを表す std::fseek に渡す引数
ファイルの終端からシークすることを表す std::fseek に渡す引数
(マクロ定数)
TMP_MAX
std::tmpnam で生成できる一意なファイル名の最大数
(マクロ定数)
L_tmpnam
std::tmpnam の結果を保持するために必要な char 配列のサイズ
(マクロ定数)

[編集] 関連項目

ファイル入出力C言語リファレンス