[C言語 標準ライブラリ] stdio.hの使い方

スポンサーリンク

stdio.hは入出力の手段を実装するためのマクロ、型、関数が宣言および定義されています。

  1. マクロ
    1. _IOFBF
    2. _IOLBF
    3. _IONBF
    4. BUFSIZ
    5. EOF
    6. FILENAME_MAX
    7. FOPEN_MAX
    8. L_tmpnam
    9. NULL
    10. SEEK_CUR
    11. SEEK_END
    12. SEEK_SET
    13. TMP_MAX
    1. FILE
    2. fpos_t
    3. size_t
  2. 標準ストリーム
    1. stderr
    2. stdin
    3. stdout
  3. ファイル操作関数
    1. int remove(const char *filename)
    2. int rename(const char *old, const char *new)
    3. FILE *tmpfile(void)
    4. char *tmpnam(char *s)
  4. ファイルアクセス関数
    1. int fclose(FILE *stream)
    2. int fflush(FILE *stream)
    3. FILE *fopen(const char *filename, const char *mode)
    4. FILE *freopen(const char *filename, const char *mode, FILE *stream)
    5. void setbuf(FILE *stream, char *buf)
    6. int setvbuf(FILE *stream, char *buf, int mode, size_t size)
    7. int fprintf(FILE *stream, const char *format, …)
    8. int fscanf(FILE *stream, const char *format, …)
    9. int printf(const char *format, …)
    10. int scanf(const char *format, …)
    11. int snprintf(char * restrict s, size_t n, const char * restrict format, …)
    12. int sprintf(char *s, const char *format, …)
    13. int sscanf(const char *s, const char *format, …)
    14. int vfprintf(FILE *stream, const char *format, va_list arg)
    15. int vfscanf(FILE * restrict stream, const char * restrict format, va_list arg)
    16. int vprintf(const char *format, va_list arg)
    17. int vscanf(const char * restrict format, va_list arg)
    18. int vsnprintf(char * restrict s, size_t n, const char * restrict format, va_list arg)
    19. int vsprintf(char *s, const char *format, va_list arg)
    20. int vsscanf(const char * restrict s, const char * restrict format, va_list arg)
  5. 文字入出力関数
    1. int fgetc(FILE *stream)
    2. char *fgets(char *s, int n, FILE *stream)
    3. int fputc(int c, FILE *stream)
    4. int fputs(const char *s, FILE *stream)
    5. int getc(FILE *stream)
    6. int getchar(void)
    7. char *gets(char *s)
    8. int putc(int c, FILE *stream)
    9. int putchar(int c)
    10. int puts(const char *s)
    11. int ungetc(int c, FILE *stream)
  6. 直接入出力関数
    1. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
    2. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  7. ファイル位置付け関数
    1. int fgetpos(FILE *stream, fpos_t *pos)
    2. int fseek(FILE *stream, long int offset, int whence)
    3. int fsetpos(FILE *stream, const fpos_t *pos)
    4. long int ftell(FILE *stream)
    5. void rewind(FILE *stream)
  8. エラー処理関数
    1. void clearerr(FILE *stream)
    2. int feof(FILE *stream)
    3. int ferror(FILE *stream)
    4. int perror(const char *s)
スポンサーリンク

マクロ

_IOFBF

setvbuf関数の第3引数として使用します。
入出力の完全バッファリングを行うことを指示します。

_IOLBF

setvbuf関数の第3引数として使用します。
入出力の行バッファリングを行うことを指示します。

_IONBF

setvbuf関数の第3引数として使用します。
入出力のバッファリングをしないことを指示します。

BUFSIZ

setbuf関数で使用されるバッファの大きさを示す整数です。
環境依存ですが、最低でも256が保証されます。

EOF

ファイルの終端(End Of File)を示す、int型の負の値をもつ整数です。

FILENAME_MAX

オープン可能なファイル名の最大長(char型の配列要素数)を示す整数です。(値は実装依存)

FOPEN_MAX

同時にオープン可能なファイル数を示す整数です。(値は実装依存)

L_tmpnam

tmpnam関数によって生成される一時ファイルを保持するために必要なchar型の配列要素数を示す整数です。

NULL

空(ヌル)ポインタ定数です。
locale.h、stddef.h、stdlib.h、string.h、time.h、wchar.hヘッダでも定義されています。

SEEK_CUR

fseek関数の第3引数として使用します。
シークの起点を現在のファイル位置にすることを指示します。

SEEK_END

fseek関数の第3引数として使用します。
シークの起点をファイルの終端にすることを指示します。

SEEK_SET

fseek関数の第3引数として使用します。
シークの起点をファイルの先頭にすることを指示します。

TMP_MAX

tmpnam関数によって生成されるファイルの最大数を示す整数です。(値は実装依存)

FILE

ファイル位置表示子、紐づけられたバッファへのポインタ、エラー表示子、ファイル終了表示子などのストリームを制御するために必要なすべての情報を記録することができるオブジェクト型です。

  • ファイル位置表示子(file position indicator)
    ファイル内のすべての位置を特定するために必要なすべての情報。
  • 紐づけられたバッファへのポインタ
  • エラー表示子(error indicator)
    読み取りエラーまたは書き込みエラーが起こったかどうかを記録します。
  • ファイル終了表示子(end-of-file indicator)
    ファイルの終わりに達したかどうかを記録します。

fpos_t

ファイルの中の任意の位置を指定するために、必要な全ての情報を記録することが可能なオブジェクト型です。

size_t

sizeof演算子の結果を表すための符号無し整数型です。
メモリ領域のオブジェクトサイズを表すのに適しており、配列の要素を参照する際に使用します。
stddef.h、stdlib.h、string.h、time.h、wchar.hヘッダでも定義されています。

標準ストリーム

OSのシェルで実装されている標準化された機能です。

stderr

標準エラーストリームに結び付けられた、FILEオブジェクトへのポインタです。

stdin

標準入力ストリームに結び付けられた、FILEオブジェクトへのポインタです。

stdout

標準出力ストリームに結び付けられた、FILEオブジェクトへのポインタです。

ファイル操作関数

int remove(const char *filename)

引数のfilenameで指定されたファイルを削除します。
既にファイルがオープンされている場合に、remove()を実行した場合の動作は実装依存です。
成功したときは0、失敗したときは0以外の値が返されます。

int rename(const char *old, const char *new)

引数oldで指定された名前のファイル名を、引数newで指定された名前に変更します。
newで指定したファイル名が既にしていた場合の動作は実装依存です。
成功したときは0、失敗したときは0以外の値が返されます。

FILE *tmpfile(void)

一時的なファイルを作成します。この関数で作成された関数はプログラムの終了時に自動的に削除されます。このためファイルをクローズする必要がありません。
ただし、プログラムが異常終了(abortなどで終了)した場合、一時ファイルが削除されるかどうかは実装依存です。
成功したときは、一時ファイルへのポインタが返され、失敗したときはNULLポインタが返されます。

char *tmpnam(char *s)

一時ファイルとして使用可能なファイル名を生成します。
この関数は、呼ばれる度に異なるファイル名を最大でTMP_MAX回生成します。
TMP_MAX回以上呼ばれた場合の動作は実装依存です。
引数がNULLポインタの場合、内部の静的オブジェクトに結果を書き込み、そのオブジェクトへのポインタを返します。 続けて呼んだ場合、このオブジェクトは変更される場合があります。
引数がNULLポインタではない場合、少なくともL_tmpnam文字の長さを持つ配列とみなされ、この配列に結果が書き込まれ、引数を返します。
ファイル名の生成に失敗したときはNULLポインタが返されます。

ファイルアクセス関数

int fclose(FILE *stream)

引数streamで指定されるストリームをフラッシュし、関連付けられているファイルを閉じます。
ストリームにバッファされた、書き込まれていないデータはすべてファイルに書き込まれます。
バッファされただけで、まだ読み込まれていないデータは破棄されます。
ストリームとバッファは切り離され、バッファは解放されます。
成功したときは0が返され、失敗したときはEOFが返されます。

int fflush(FILE *stream)

引数streamが出力ストリームまたは最新の操作が入力されていない更新ストリームを指している場合、fflush関数は、そのストリームに対する未書き込みのデータをホスト環境に配信してファイルに書き込ませます。
それ以外の場合の動作は未定義です。
streamがNULLポインタの場合、上記の動作が定義されているすべてのストリームに対してこのフラッシュ動作を実行します。
ストリームのエラーインジケータを設定し、成功した場合は0が返され、書き込みエラーが発生した場合はEOFが返されます。

FILE *fopen(const char *filename, const char *mode)

引数filenameが指す名前のファイルを、引数modeで指定したモードでオープンします。
modeは次のいずれかの文字列を指定します。下表以外の文字列を指定した場合の動作は未定義です。

modeに指定する文字列モードの説明
rテキストファイルの読み取りモード
wテキストファイルの書き込みモード
x書き込み用テキストファイルの作成 ※C11
aテキストファイルの追加書き込みモード
rbバイナリファイルの読み取りモード
wbバイナリファイルの書き込みモード
wbx書き込み用バイナリファイルの作成 ※C11
abバイナリファイルの追加書き込みモード
r+テキストファイルの読み取り/書き込みモード
w+テキストファイルの書き込み/読み取りモード
a+テキストファイルの読み取り/追加書き込みモード
r+b または rb+バイナリファイルの読み取り/書き込みモード
w+b または wb+バイナリファイルの書き込み/読み取りモード
w+bx または wb+xアップデート用バイナリファイルの作成 ※C11
a+b または ab+バイナリファイルの読み取り/追加書き込みモード

排他モード(最後の文字が’x’)でファイルオープンしたとき、ファイルがすでに存在するか、作成できない場合は失敗します。
成功したときはストリームを制御するオブジェクトへのポインタが返され、失敗したときはNULLポインタが返されます。

FILE *freopen(const char *filename, const char *mode, FILE *stream)

引数filenameが指す文字列をファイル名とするファイルを開き、引数streamが指すストリームをそれに関連付けます。
引数modeはfopen関数と同様に使用されます。
filenameがNULLポインタの場合、ストリームのモードをmodeで指定されたものに変更し、現在のストリームに関連付けられているファイルの名前が使われているかのように動作します。どのようなモードの変更が許可されるか、またどのような状況下で許可されるかは実装定義です。
指定されたストリームに関連付けられているすべてのファイルを閉じます。
ファイルのクローズに失敗しても無視されます。
ストリームのエラー・インジケータとファイル終了インジケータはクリアされます。
成功したときはstreamの値が返され、失敗したときはNULLポインタが返されます。

void setbuf(FILE *stream, char *buf)

引数streamが指すファイルのストリームに対して、引数bufが指す配列をバッファとした、入出力用のバッファを設定します。
modeを_IOFBF, sizeをBUFSIZとしたsetvbuf関数と同じ動作です。ただし、bufがNULLポインタの場合、modeを_IONBFとしたsetvbuf関数と同じ動作です。

int setvbuf(FILE *stream, char *buf, int mode, size_t size)

引数streamが指すファイルのストリームに対して、引数sizeの大きさを持った引数bufが指す配列をバッファとし、引数modeで指定したバッファリングの方法で、入出力用のバッファを設定します。
bufにNULLを指定した場合、setvbuf関数がsizeの大きさを持ったバッファを割り付けます。
modeは次のいずれかを指定します。

modeに指定する値モード説明
_IOFBF完全バッファリングバッファがいっぱいになった時点で、ホスト環境へ、またはホスト環境から文字をブロック単位で転送します。
_IOLBF行バッファリング改行文字に達した時点で、ホスト環境へ、またはホスト環境から文字をブロック単位で転送します。
_IONBFバッファリングをしない文字が入力元から、または出力先へ可能な限りすぐ現れる。

成功したときは0が返され、modeに無効な値が指定された場合、または要求に従うことができなかった場合は0以外の値が返されます。

int fprintf(FILE *stream, const char *format, …)

引数formatが指す書式文字列に従って、引数streamが指すストリームへ書き込みます。
書式文字列には、それに続く任意個数の実引数と同じ数だけの変換指定が含まれる必要があります。
書式文字列に含まれる変換指定の部分が、それに対応する後の実引数の値によって置換されます。
成功したときは書き出された文字数が返されます。出力エラーまたは表現形式エラーが発生したときは負の値が返されます。
変換指定は次のように指定します。

%[フラグ][最小フィールド幅][.][精度][長さ修飾子]変換指定子

※[]は省略可能であることを示します。

フラグ

  • ‘-‘
    変換結果をフィールド内に左詰めにします(デフォルトでは右詰)。
  • ‘+’
    符号付き変換の結果を常に正符号又は負符号で始めます(デフォルトでは負の値の場合のみ負符号で始めます)。
  • ‘ ‘ (space)
    符号付き変換の結果の最初の文字が符号でない場合、1個の空白を結果の前に付けます。
  • ‘#’
    変換指定子がoなら「0」を、xなら「0x」を、Xなら「0X」を結果の前に付加します。変換指定子がa, A, e, E, f, F, g, Gなら、小数点文字の後ろに数字が続かない場合でも、浮動小数点数の変換の結果に常に小数点文字を含めます。変換指定子がg, Gなら、後ろの続く0を結果から取り除きません。
  • ‘0’
    0を文字列の左に付加することができます。

最小フィールド幅

値を変換した結果の文字数が最小フィールド幅より少ない場合、最小フィールド幅を満たすまで左側に(-フラグがあるときは右側に)空白を詰めることです。

精度

変換指定子がd, i, u, x, Xなら、出力する数字の最小の個数を指定します。
変換指定子がa, A, e, E, f, Fなら、小数点文字の後ろに出力すべき数字の個数を指定します。
変換指定子がg, Gなら、最大の有効桁数を指定します。
変換指定子がsなら、書き込む最大のバイト数を指定します。

長さ修飾子

修飾子説明導入バージョン
hh実引数は char 型C99以降。
h実引数は short 型全バージョン。
l実引数は long 型
または wchar_t 型
または double 型
wchar_t についてはC95以降。
double についてはC99以降。
ll実引数は long long 型C99以降。
j実引数は intmax_t 型C99以降。
z実引数は size_t 型C99以降。
t実引数は ptrdiff_t 型C99以降。
L実引数は long double 型全バージョン。

変換指定子

変換指定説明
%d, %i実引数を符号付き10進表記に変換します。
%u実引数を符号無し10進表記に変換します。
%o実引数を符号無し8進表記に変換します。
%x, %X実引数を符号無し16進表記に変換します。
%xは英字abcdefを、%Xは英字ABCDEFを用います。
%f, %F実引数を小数形式の10進浮動小数点数表記に変換します。
%e, %E実引数を指数形式の10進浮動小数点数表記に変換します。
%g, %G実引数を小数形式または指数形式の10進浮動小数点数表記に変換します。
%a, %A実引数を指数形式の16進浮動小数点数表記に変換します。
%c実引数を文字に変換します。
%s実引数を文字列に変換します。
%pポインタの値に変換します。
%n整数変数に出力した文字数を格納します。
%%‘%’を出力します。

int fscanf(FILE *stream, const char *format, …)

引数formatが指す書式文字列に従って、streamが指すストリームから入力を、任意個数の実引数へ読み込みます。
書式文字列には、それに続く任意個数の実引数と同じ数だけの変換指定が含まれる必要があります。
ストリームからの入力が、書式文字列に含まれる変換指定に従って、それに対応する後の実引数が指す変数に代入されます。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。
この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。
変換指定は次のように指定します。

%[*][最大フィールド幅][長さ修飾子]変換指定子

※[]は省略可能であることを示す。

代入抑止文字です。
「*」を指定すると、入力は変換されず、読み飛ばされます。

最大フィールド幅

最大フィールド幅(文字で数えて)を指定する正の10進整数です。
入力から指定した文字数だけ変換されます。

長さ修飾子

修飾子説明導入バージョン
hh実引数は char 型C99以降。
h実引数は short 型全バージョン。
l実引数は long 型
または wchar_t 型
または double 型
wchar_t についてはC95以降。
double についてはC99以降。
ll実引数は long long 型C99以降。
j実引数は intmax_t 型C99以降。
z実引数は size_t 型C99以降。
t実引数は ptrdiff_t 型C99以降。
L実引数は long double 型全バージョン。

変換指定子

変換指定説明
%d入力を符号付き10進整数に変換します。
%i入力を符号付き整数に変換します。
%u入力を符号無し10進整数に変換します。
%o入力を符号無し8進整数に変換します。
%x入力を符号無し16進整数に変換します。
%a, %e, %f, %g入力を浮動小数点数に変換します。
%c入力を文字に変換します。
%s入力を文字列に変換します。
%p入力をポインタの値に変換します。
%n整数変数に入力した文字数を格納します。
%%1つの%と照合します。
%[走査文字の並び]走査文字の並びに含まれる文字のみを入力し、文字列に変換します。
[の直後に^を指定した場合、走査文字の並びに含まれない文字のみを入力し、文字列に変換します。

int printf(const char *format, …)

引数formatが指す書式文字列に従って、標準出力へ書き込みます。
stdoutを実引数として付加したfprintf関数と同等です。
成功したときは、書き出された文字数が返されます。出力エラーまたは表現形式エラーが発生したときは、負の値が返されます。

int scanf(const char *format, …)

引数formatが指す書式文字列に従って、標準入力を任意個数の実引数へ読み込みます。
stdinを実引数として付加したfscanf関数と同等です。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。

int snprintf(char * restrict s, size_t n, const char * restrict format, …)

引数formatが指す書式文字列に従って、nで指定した書き込む文字数分だけ、sが指す配列へ書き込みます。
生成された出力をストリームではなく実引数sで指定する配列に書き込むことを除いては、fprintf関数と同等です。
書き込む文字数にはNULL文字を含みます。
領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義です。
成功したときは、nが十分に大きい場合に配列に書き込んだはずの文字数が返されます。
ただし、終端NULL文字は含みません。
表現形式エラーが発生したときは、負の値が返されます。
すなわち、返却値が非負かつn未満の場合、そしてその場合に限り、NULL文字で終了している出力が完全に書き込まれています。

int sprintf(char *s, const char *format, …)

引数formatが指す書式文字列に従って、sが指す配列へ書き込みます。
生成された出力をストリームではなく実引数sで指定する配列に書き込むことを除いては、fprintf関数と同等です。
書き込まれた出力文字の列の後にNULL文字を書き込みます。
領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義です。
成功したときは、配列に書き込まれた文字数が返されます。
ただし、NULL文字は文字数に含めません。
表現形式エラーが発生したときは、負の値が返されます。

int sscanf(const char *s, const char *format, …)

引数formatが指す書式文字列に従って、sが指す文字列を、任意個数の実引数へ読み込みます。
入力をストリームではなく実引数sで指定される文字列から得ることを除けば、fscanf関数と同等です。
文字列の終わりに達することが、fscanf関数でファイルの終わりに達することと同等です。
領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義です。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。
この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。

int vfprintf(FILE *stream, const char *format, va_list arg)

引数formatが指す書式文字列に従って、可変個数の実引数のリストを、streamが指すストリームへ書き込みます。
可変個数の実引数並びを、argで置き換えたfprintf関数と同等です。
vfprintf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vfprintf関数はva_endマクロを呼び出しません。
成功したときは、書き出された文字数が返されます。
出力エラーまたは表現形式エラーが発生したときは、負の値が返されます。

int vfscanf(FILE * restrict stream, const char * restrict format, va_list arg)

引数formatが指す書式文字列に従って、streamが指すストリームから入力を、可変個数の実引数のリストへ読み込みます。
可変個数の実引数並びをargで置き換えたfscanf関数と同等です。
vfscanf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vfscanf関数はva_endマクロを呼び出しません。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。
この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。

int vprintf(const char *format, va_list arg)

引数formatが指す書式文字列に従って、可変個数の実引数のリストを、標準出力へ書き込みます。
可変個数の実引数並びをargで置き換えたprintf関数と同等です。
vprintf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vprintf関数はva_endマクロを呼び出しません。
成功したときは、書き出された文字数が返されます。
出力エラーまたは表現形式エラーが発生したときは、負の値が返されます。

int vscanf(const char * restrict format, va_list arg)

引数formatが指す書式文字列に従って、標準入力を、可変個数の実引数のリストへ読み込みます。
可変個数の実引数並びをargで置き換えたscanf関数と同等です。
vscanf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vscanf関数はva_endマクロを呼び出しません。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。
この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。

int vsnprintf(char * restrict s, size_t n, const char * restrict format, va_list arg)

引数formatが指す書式文字列に従って、可変個数の実引数のリストを、nで指定した書き込む文字数分だけ、sが指す配列へ書き込みます。
可変個数の実引数並びをargで置き換えたsnprintf関数と同等です。
vsnprintf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vsnprintf関数はva_endマクロを呼び出しません。
領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義です。
成功したときは、nが十分に大きい場合に配列に書き込んだはずの文字数が返されます。
ただし、終端NULL文字は含みません。
表現形式エラーが発生した場合、負の値が返されます。
すなわち、返却値が非負かつn未満の場合、そしてその場合に限り、NULL文字で終了している出力が完全に書き込まれています。

int vsprintf(char *s, const char *format, va_list arg)

引数formatが指す書式文字列に従って、可変個数の実引数のリストを、sが指す配列へ書き込みます。
可変個数の実引数並びをargで置き換えたsprintf関数と同等です。
vsprintf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vsprintf関数はva_endマクロを呼び出しません。
領域の重なり合うオブジェクト間でコピーが行われるとき、その動作は未定義です。
成功したときは、配列に書き込まれた文字数が返されます。
ただし、NULL文字は文字数に含みません。
表現形式エラーが発生した場合、負の値が返されます。

int vsscanf(const char * restrict s, const char * restrict format, va_list arg)

引数formatが指す書式文字列に従って、sが指す文字列を、可変個数の実引数のリストへ読み込みます。
可変個数の実引数並びをargで置き換えたsscanf関数と同等です。
vsscanf関数の呼び出し前に、va_startマクロでargを初期化する必要があります。
vsscanf関数はva_endマクロを呼び出しません。
変換が一つも行われないまま入力誤りが発生した場合、マクロEOFの値が返されます。
その他の場合、代入された入力項目の個数が返されます。
この個数は、入力中に照合誤りが発生すると、与えられた入力項目の個数より少なくなることもあり、0になることもあります。

文字入出力関数

int fgetc(FILE *stream)

引数streamが指す入力ストリームから1文字取り込み、その値が返されます。
その文字はunsigned char型として取り込まれ、そしてint型に変換され、ファイル位置表示子を進めます。
ファイル終了表示子がセットされている場合、またはファイルの終わりに達している場合、ファイル終了表示子がセットされ、EOFが返されます。
読み取りエラーが発生した場合、エラー表示子がセットされ、EOFが返されます。
その他の場合は、次の文字が返されます。

char *fgets(char *s, int n, FILE *stream)

引数streamが指すストリームから、文字の列を読み取り、sが指す配列に格納します。
読み取る文字の列は改行またはファイルの終わりまでで、読み取る文字数の最大値はn-1です。
最後にNULL文字を付けます。
成功した場合は、sが返されます。
ファイルの終わりを検出し、かつ配列に1文字も読み取っていなかった場合、または読み取りエラーが発生した場合は、NULLポインタが返されます。

int fputc(int c, FILE *stream)

引数streamが指す出力ストリームにcで指定された文字を書き込みます。
その文字は、int型からunsigned char型に変換され、ファイル位置表示子を進めます。
成功したときは、書き込んだ文字が返されます。
書き込みエラーが発生した場合は、エラー表示子がセットされ、EOFが返されます。

int fputs(const char *s, FILE *stream)

引数streamが指すストリームにsが指す文字列を書き込みます。
終端NULL文字の書き込みは行いません。
書き込みエラーが発生した場合は、EOFが返されます。
その他の場合は、非負の値が返されます。

int getc(FILE *stream)

引数streamが指す入力ストリームから1文字取り込み、その値が返されます。
fgetc関数と同等です。
ファイルの終わりに達している場合、ファイル終了表示子がセットされ、EOFが返されます。
読み取りエラーが発生した場合、エラー表示子がセットされ、EOFが返されます。
その他の場合は、次の文字が返されます。

int getchar(void)

標準入力から1文字取り込み、その値が返されます。
実引数としてstdinを指定したgetc関数と同等です。
ファイルの終わりに達している場合、ファイル終了表示子がセットされ、EOFが返されます。
読み取りエラーが発生した場合、エラー表示子がセットされ、EOFが返されます。
その他の場合は、次の文字が返されます。

char *gets(char *s)

標準入力から文字の列を読み取り、sが指す配列に格納します。
読み取る文字の列は改行またはファイルの終わりまでです。
最後に改行文字の代わりにNULL文字を付けます。
成功した場合、sが返されます。
ファイルの終わりを検出し、かつ配列に1文字も読み取っていなかった場合、または読み取りエラーが発生した場合、NULLポインタが返されます。

gets関数はC11で削除されました。
※gets関数は読取る文字数を指定できないため、 原理的に、バッファオーバーランを防ぐことができません。

int putc(int c, FILE *stream)

引数streamが指す出力ストリームにcで指定された文字を書き込みます。
fputc関数と同等です。
成功したときは、書き込んだ文字が返されます。
書き込みエラーが発生したときは、エラー表示子がセットされ、EOFが返されます。

int putchar(int c)

標準出力にcで指定された文字を書き込みます。
第2実引数としてstdoutを指定したputc関数と同等です。
成功したときは、書き込んだ文字が返されます。
書き込みエラーが発生したときは、エラー表示子がセットされ、EOFが返されます。

int puts(const char *s)

標準出力にsが指す文字列を書き込みます。
出力の最後に改行文字を追加します。
終端NULL文字の書き込みは行いません。
書き込みエラーが発生した場合、EOFが返されます。
その他の場合、非負の値が返されます。

int ungetc(int c, FILE *stream)

cで指定された(unsigned charに変換された)文字を、streamが指す入力ストリームに押し戻します。
押し戻された文字は、そのストリームに対する後続の読み込みによって、押し戻された順序とは逆の順序で返されます。
ファイル位置指定関数(fseek、fsetpos、rewind)を(streamが指すストリームで)正常に呼び出した場合、そのストリームで押し戻された文字は破棄されます。
ストリームに対応する外部記憶装置は変更されません。
1文字分のプッシュバックが保証されます。
ungetc関数が同一ストリーム上で何度も呼び出され、その間にそのストリームの読み込みやファイルの位置決め操作が行われなかった場合、操作は失敗することがあります。
cの値がマクロEOFの値と等しい場合、操作は失敗し、入力ストリームは変更されません。
ungetc 関数の呼び出しに成功すると、ストリームのファイル終端インジケータがクリアされます。
テキストストリームの場合、ungetc関数の呼び出しに成功した後のファイル位置インジケータの値は、押し戻された文字がすべて読み込まれるか、または廃棄されるまで特定できません。
バイナリストリームの場合、ungetc関数の呼び出しが成功するたびに、そのファイルポジションインジケーターはデクリメントされます。
呼び出し前にその値がゼロだった場合、呼び出し後は不定です。
成功したときは、変換後に押し戻された文字が返されます。
失敗したときは、EOFが返されます。

直接入出力関数

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

引数streamが指すストリームから、最大nmemb個の大きさsizeの要素を、ptrが指す配列に読み取ります。
ファイル位置表示子を読み取りに成功した文字数分進めます。
エラーが発生した場合、そのストリームのファイル位置表示子の値は不定です。
1つの要素の一部だけが読み取られた時、その値は不定です。
読み取りに成功した要素の個数が返されます。
その個数は、読み取りエラーが発生した場合、またはファイルの終わりに達した場合、nmembより小さいことがあります。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

ptrが指す配列から,sizeで指定されたサイズのnmemb要素までをstreamが指すストリームに書き込みます。
各オブジェクトに対して、サイズコールがfputc関数に行われ、オブジェクトの上に正確に重なっているunsigned charの配列から値を(順に)取得します。
ストリームのファイル・ポジション・インジケータ(定義されている場合)は、正常に書き込まれた文字数だけ進みます。
エラーが発生した場合、ストリームのファイルポジションインジケータの結果は不定です。
書き込みに成功した要素の個数が返されます。
その個数は、書き込みエラーが発生した場合のみ、nmembよりも小さくなります。
sizeまたはnmembが0の場合は0が返され、ストリームの状態は変更されません。

ファイル位置付け関数

int fgetpos(FILE *stream, fpos_t *pos)

引数streamが指すストリームの解析状態及びファイル位置表示子のその時点の値を、posが指すオブジェクトに格納します。
fsetpos関数を用いて、fgetpos関数で取得したファイル位置に、ストリームを再び位置づけることができます。
成功したときは0が返されます。
失敗したときは0以外が返され、処理系定義の正の値をerrnoに格納します。

int fseek(FILE *stream, long int offset, int whence)

引数streamが指すストリームのファイル位置表示子の値を変更します。
読み取りエラーまたは書き込みエラーが発生した場合、エラー表示子がセットされ、fseek関数は失敗します。
バイナリストリームの場合、新しい位置は、whenceが指す位置にoffsetを加えた位置です。
whenceにはSEEK_SET, SEEK_CUR, SEEK_ENDのいずれかを指定し、SEEK_SETはファイルの初め、SEEK_CURはファイル位置表示子のその時点の値、SEEK_ENDはファイルの終わりを意味します。
SEEK_ENDを指定した場合、呼び出しが意味のあるものとしてサポートされるとは限りません。
テキストストリームの場合、offsetに0を指定する、または同じファイルに結び付けられたストリームに対する以前の成功したftell関数の呼び出しで返された値を指定する必要があります。
後者の場合whenceにはSEEK_SETを指定します。
fseek関数の呼び出しに成功すると、新しい位置を決定した後、ストリームに対するungetc関数の効果をすべて解除し、そのストリームのファイル終了表示子をクリアした上で、ファイル位置表示子を新しい位置に設定します。
fseek関数の呼び出しが成功した後では、更新ストリームに対する次の操作は入力でも出力でもよい。
要求を満足できなかった場合に限り、0以外の値が返されます。

int fsetpos(FILE *stream, const fpos_t *pos)

posが指すオブジェクトの値に従って、streamが指すストリームのmbstate_tオブジェクトおよびファイル位置表示子を設定します。
fsetpos関数を用いて、fgetpos関数で取得したファイル位置に、ストリームを再び位置づけることができます。
読み取りエラーまたは書き込みエラーが発生した場合、そのストリームに対するエラー表示子が設定され、fsetposは失敗します。
fsetpos関数の呼び出しに成功すると、そのストリームに対するungetc関数の効果をすべて解除し、そのストリームのファイル終了表示子をクリアしたうえで、新しい解析状態を設定し、ファイル位置表示子を新しい位置に設定します。
fsetposの呼び出しが成功した後では、更新ストリームに対する次の操作は入力でも出力でもよい。
成功したとき、0が返されます。
失敗したとき、0以外の値が返され、処理系定義の正の値をerrnoに格納します。

long int ftell(FILE *stream)

引数streamが指すストリームのファイル位置表示子のその時点の値を得ます。
バイナリストリームの場合、その値はファイルの始めからの文字数です。
テキストストリームの場合、そのファイル位置表示子は、ftell関数の呼び出し時の位置にそのストリームのファイル位置表示子を戻すために、fseek関数で使用できる情報を含みます。
ただし、この情報の内容は未規定です。
ftell関数の2回の呼び出し戻り値の差は、書き込み文字数または読み取り文字数という意味を持つとは限りません。
成功したとき、そのストリームのファイル位置表示子のその時点の値が返されます。
失敗したとき、-1Lが返され、処理系定義の正の値をerrnoに格納します。

void rewind(FILE *stream)

引数streamが指すストリームに対応するファイル位置表示子を、そのファイルの始めに位置付けます。
すなわち、そのストリームに対応するエラー表示子をクリアすることを除けば、

(void)fseek(stream, 0L, SEEK_SET)

と同等です。

エラー処理関数

void clearerr(FILE *stream)

引数streamが指すストリームのファイル終了表示子およびエラー表示子をクリアします。

int feof(FILE *stream)

引数streamが指すストリームのファイル終了表示子を判定します。
streamのファイル終了表示子がセットされている場合、0以外の値が返されます。
セットされていない場合、0が返されます。

int ferror(FILE *stream)

引数streamが指すストリームのエラー表示子を判定します。
streamのエラー表示子がセットされている場合、0以外の値が返されます。
セットされていない場合、0が返されます。

int perror(const char *s)

整数式errnoのエラー番号に対応するエラーメッセージを生成します。
すなわち標準エラーストリームに文字の並びを書き込みます。
その文字の並びは、sがNULLポインタでなく、かつsが指す文字がNULL文字でないなら、

{ 仮引数 s の内容 }: エラーメッセージ

であり、それ以外なら、

エラーメッセージ

です。
errnoは静的な場所に格納されるエラーコードによってエラー状態を報告するマクロです。
ヘッダー(errno.h)で定義されています。

スポンサーリンク
C言語
コッコ隊長の勉強部屋

コメント