ストリーム入出力用ファイルの入出力に関する処理を行います。
 
以下の定数(マクロ)はすべて処理系定義です。
| 
 | 
 | 
 | 
| 
 
定数 
(マクロ) 
 | 
 
FILE 
 | 
 
ストリーム入出力処理で必要とするバッファへのポインタやエラー指示子、終了指示子などの各種制御情報を保存しておく構造体の型です。 
 | 
| 
 
_IOFBF 
 | 
 
バッファ領域の使用方法として、入出力処理はすべてバッファ領域を使用することを示しています。 
 | 
| 
 
_IOLBF 
 | 
 
バッファ領域の使用方法として、入出力処理は行単位でバッファ領域を使用することを示しています。 
 | 
| 
 
_IONBF 
 | 
 
バッファ領域の使用方法として、入出力処理はバッファ領域を使用しないことを示しています。 
 | 
| 
 
BUFSIZ 
 | 
 
入出力処理において必要とするバッファの大きさです。 
 | 
| 
 
EOF 
 | 
 
ファイルの終わり(End Of File)すなわちファイルからそれ以上の入力が無いことを示しています。 
 | 
| 
 
L_tmpnam* 
 | 
 
tmpnam関数によって生成される一時ファイル名の文字列を格納するのに十分な大きさの配列のサイズです。 
 | 
| 
 
SEEK_CUR 
 | 
 
ファイルの現在の読み書き位置を現在の位置からのオフセットに移すことを示しています。 
 | 
| 
 
SEEK_END 
 | 
 
ファイルの現在の読み書き位置をファイルの終了位置からのオフセットに移すことを示しています。 
 | 
| 
 
SEEK_SET 
 | 
 
ファイルの現在の読み書き位置をファイルの先頭位置からのオフセットに移すことを示しています。 
 | 
| 
 
SYS_OPEN* 
 | 
 
処理系が同時にオープンすることができることを保証するファイルの数です。 
 | 
| 
 
TMP_MAX* 
 | 
 
tmpnam関数によって生成される一意なファイル名の個数の最大値です。 
 | 
| 
 
stderr 
 | 
 
標準エラーファイルに対するファイルポインタです。 
 | 
| 
 
stdin 
 | 
 
標準入力ファイルに対するファイルポインタです。 
 | 
| 
 
stdout 
 | 
 
標準出力ファイルに対するファイルポインタです。 
 | 
| 
 
関数 
 | 
 
fclose 
 | 
 
ストリーム入出力用ファイルをクローズします。 
 | 
| 
 
fflush 
 | 
 
ストリーム入出力用ファイルのバッファの内容をファイルへ出力します。 
 | 
| 
 
fopen 
 | 
 
ストリーム入出力用ファイルを指定したファイル名によってオープンします。 
 | 
| 
 
freopen 
 | 
 
現在オープンされているストリーム入力出用ファイルをクローズし、新しいファイルを指定したファイル名で再オープンします。 
 | 
| 
 
setbuf 
 | 
 
ストリーム入出力用のバッファ領域をユーザプログラム側で定義して設定します。 
 | 
| 
 
setvbuf 
 | 
 
ストリーム入出力用のバッファ領域をユーザプログラム側で定義して設定します。 
 | 
| 
 
fprintf 
 | 
 
書式に従ってストリーム入出力用ファイルへデータを出力します。 
 | 
| 
 
vfprintf 
 | 
 
可変個の引数リストを書式に従って指定したストリーム入出力用ファイルに出力します。 
 | 
| 
 
printf 
 | 
 
データを書式に従って変換し、標準出力ファイル(stdout)へ出力します。 
 | 
| 
 
vprintf 
 | 
 
可変個の引数リストを書式に従って標準出力ファイル(stdout)に出力します。 
 | 
| 
 
sprintf 
 | 
 
データを書式に従って変換し、指定した領域へ出力します。 
 | 
| 
 
sscanf 
 | 
 
指定した記憶域からデータを入力し、書式に従って変換します。 
 | 
| 
 
snprintf       <-lang=c99> 
 | 
 
データを書式に従って変換し、配列に書き込みます。 
 | 
| 
 
vsnprintf      <-lang=c99> 
 | 
 
可変個数の実引数並びをva_listで置き換えたsnprintfと等価です。 
 | 
| 
 
vfscanf       <-lang=c99> 
 | 
 
可変個数の実引数並びをva_listで置き換えたfscanfと等価です。 
 | 
| 
 
vscanf        <-lang=c99> 
 | 
 
可変個数の実引数並びをva_listで置き換えたscanfと等価です。 
 | 
| 
 
vsscanf       <-lang=c99> 
 | 
 
可変個数の実引数並びをva_listで置き換えたsscanfと等価です。 
 | 
| 
 
fscanf 
 | 
 
ストリーム入出力用ファイルからデータを入力し、書式に従って変換します。 
 | 
| 
 
scanf 
 | 
 
標準入力ファイル(stdin)からデータを入力し、書式に従って変換します。 
 | 
| 
 
vsprintf 
 | 
 
可変個の引数リストを書式に従って指定した領域に出力します。 
 | 
| 
 
fgetc 
 | 
 
ストリーム入出力用ファイルから1文字入力します。 
 | 
| 
 
fgets 
 | 
 
ストリーム入出力用ファイルから文字列を入力します。 
 | 
| 
 
fputc 
 | 
 
ストリーム入出力用ファイルへ1文字出力します。 
 | 
| 
 
fputs 
 | 
 
ストリーム入出力用ファイルへ文字列を出力します。 
 | 
| 
 
getc 
 | 
 
(マクロ) ストリーム入出力用ファイルから1文字入力します。 
 | 
| 
 
getchar 
 | 
 
(マクロ) 標準入力ファイルから1文字入力します。 
 | 
| 
 
gets 
 | 
 
標準入力ファイルから文字列を入力します。 
 | 
| 
 
putc 
 | 
 
(マクロ) ストリーム入出力用ファイルへ1文字出力します。 
 | 
| 
 
putchar 
 | 
 
(マクロ) 標準出力ファイルへ1文字出力します。 
 | 
| 
 
関数 
 | 
 
puts 
 | 
 
標準出力ファイルへ文字列を出力します。 
 | 
| 
 
ungetc 
 | 
 
ストリーム入出力用ファイルへ1文字をもどします。 
 | 
| 
 
fread 
 | 
 
ストリーム入出力用ファイルから指定した記憶域にデータを入力します。 
 | 
| 
 
fwrite 
 | 
 
記憶域からストリーム入出力用ファイルにデータを出力します。 
 | 
| 
 
fseek 
 | 
 
ストリーム入出力用ファイルの現在の読み書き位置を移動させます。 
 | 
| 
 
ftell 
 | 
 
ストリーム入出力用ファイルの現在の読み書き位置を求めます。 
 | 
| 
 
rewind 
 | 
 
ストリーム入出力用ファイルの現在の読み書き位置をファイルの先頭に移動します。 
 | 
| 
 
clearerr 
 | 
 
ストリーム入出力用ファイルのエラー状態をクリアします。 
 | 
| 
 
feof 
 | 
 
ストリーム入出力用ファイルが終わりであるかどうかを判定します。 
 | 
| 
 
ferror 
 | 
 
ストリーム入出力用ファイルがエラー状態であるかどうかを判定します。 
 | 
| 
 
perror 
 | 
 
標準エラーファイル(stderr)に、エラー番号に対応したエラーメッセージを出力します。 
 | 
| 
 
型 
 | 
 
fpos_t 
 | 
 
ファイル中の任意の位置を指定可能な型です。 
 | 
| 
 
定数 
(マクロ) 
 | 
 
FOPEN_MAX 
 | 
 
同時にオープン可能なファイル数です。 
 | 
| 
 
FILENAME_MAX 
 | 
 
保持可能なファイル名の最大長です。 
 | 
 
 
処理系定義仕様
| 
 | 
 | 
 | 
| 
 
1 
 | 
 
入力テキストの最終の行が終了を示す改行文字を必要とするかどうか 
 | 
 
規定しません。低水準インタフェースルーチンの仕様によります。 
 | 
| 
 
2 
 | 
 
改行文字の直前に書き出された空白文字は、読み込み時に読み込まれるかどうか 
 | 
| 
 
3 
 | 
 
バイナリファイルに書かれたデータに付加されるヌル文字の数 
 | 
| 
 
4 
 | 
 
追加モード時のファイル位置指定子の初期値 
 | 
| 
 
5 
 | 
 
テキストファイルへの出力によってそれ以降のファイルのデータが失われるかどうか 
 | 
| 
 
6 
 | 
 
ファイルバッファリングの仕様 
 | 
| 
 
7 
 | 
 
長さ0のファイルが存在するかどうか 
 | 
| 
 
8 
 | 
 
正当なファイル名の構成規則 
 | 
| 
 
9 
 | 
 
同時に同じファイルをオープンできるかどうか 
 | 
| 
 
10 
 | 
 
fprintf関数における%p書式変換の出力形式 
 | 
 
16進数出力となります 
 | 
| 
 
11 
 | 
 
fscanf関数における%p書式変換の入力形式 
fscanf関数での変換文字「-」の意味 
 | 
 
16進数入力となります。 
先頭、最後あるいは「^」の直後でない場合、直前の文字と直後の範囲を示します。 
 | 
| 
 
12 
 | 
 
fgetpos,ftell関数で設定されるerrnoの値 
 | 
 
fgetpos関数はサポートしていません。 
ftell関数については規定しません。 
低水準インタフェースルーチンの仕様によります。 
 | 
| 
 
13 
 | 
 
perror関数が生成するメッセージ出力形式 
 | 
 
メッセージの出力形式を(a)に示します。 
 | 
 
 
(a) perror関数の出力形式は、
<文字列>:<errorに設定したエラー番号に対応するエラーメッセージ>
となります。
(b) printf関数、fprintf関数で、浮動小数点の無限大および非数を表示するときの形式を表 7.8に示します。
| 
 | 
 | 
 | 
| 
 
1 
 | 
 
正の無限大 
 | 
 
++++++ 
 | 
| 
 
2 
 | 
 
負の無限大 
 | 
 
―――――― 
 | 
| 
 
3 
 | 
 
非数 
 | 
 
****** 
 | 
 
 
ストリーム入出力用ファイルに対する一連の入出力処理を行ったプログラムの例を以下に示します。
    1   #include <stdio.h>
    2
    3   void main()
    4   {
    5       int c;
    6       FILE *ifp, *ofp;
    7
    8       if ((ifp=fopen("INPUT.DAT","r"))==NULL){
    9           fprintf(stderr,"cannot open input file\n");
    10          exit(1);
    11      }
    12      if ((ofp=fopen("OUTPUT.DAT","w"))==NULL){
    13          fprintf(stderr,"cannot open output file\n");
    14          exit(1);
    15      }
    16      while ((c=getc(ifp))!=EOF)
    17          putc(c, ofp);
    18      fclose(ifp);
    19      fclose(ofp);
    20  }
 
【説明】
ファイルINPUT.DATの内容をファイルOUTPUT.DATへコピーするプログラムです。
8行目のfopen関数で入力ファイルINPUT.DATを、12行目のfopen関数で出力ファイルOUTPUT.DATをオープンします。オープンに失敗した場合、fopen関数のリターン値としてNULLが返されますので、エラーメッセージを出力してプログラムを終了させます。
fopen関数が正常に終了した時、オープンしたファイルの情報を格納するデータ(FILE型)へのポインタが返されますので、これらを変数ifp、ofpに設定します。
オープンが成功した後は、これらのFILE型のデータを用いて入出力を行います。
ファイルの処理が終了したら、fclose関数でファイルをクローズします。