7.4.11 <stdio.h>

ストリーム入出力用ファイルの入出力に関する処理を行います。

 

以下の定数(マクロ)はすべて処理系定義です。

種別

定義名

説明

定数

(マクロ)

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に示します。

表 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関数でファイルをクローズします。

 

fclose

ストリーム入出力用ファイルをクローズします。

 

[指定形式]

#include <stdio.h>

long fclose(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

正常:0

異常:0以外

 

[備考]

fclose関数は、ファイルポインタfpの示すストリーム入出力用ファイルをクローズします。

fclose関数は、ストリーム入出力用ファイルの出力ファイルがオープンされており、まだ出力されていないデータがバッファに残っている時は、それをファイルに出力してからクローズします。

また、入出力用のバッファがシステムによって自動的に割り付けられていた場合は、それを解放します。

 

fflush

ストリーム入出力用ファイルのバッファの内容をファイルへ出力します。

 

[指定形式]

#include <stdio.h>

long fflush(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

正常:0

異常:0以外

 

[備考]

fflush関数は、ストリーム入出力用ファイルの出力ファイルがオープンされている時、ファイルポインタfpで指定されたストリーム入出力用ファイルのバッファの未出力内容をファイルに出力します。また、入力ファイルがオープンされている時、ungetc関数の指定を無効にします。

 

fopen

ストリーム入出力用ファイルを、指定したファイル名によってオープンします。

 

[指定形式]

#include <stdio.h>

FILE *fopen(const char *fname, const char *mode);

 

[引数]

fname ファイル名を示す文字列へのポインタ

mode ファイルアクセスモードを示す文字列へのポインタ

 

[戻り値]

正常:オープンしたファイルのファイル情報を指すファイルポインタ

異常:NULL

 

[備考]

fopen関数は、fnameが指す文字列をファイル名とするストリーム入出力用ファイルをオープンします。書き出しモードあるいは追加モードで存在しないファイルをオープンしようとした時は、可能な限り新しいファイルを作成します。また既存のファイルに対して書き出しモードでオープンした時は、ファイルの先頭から書き込みが行われ、以前に書き込まれていたファイルの内容は消去されます。

追加モードでオープンしたファイルは、そのファイルの終わりの位置から書き出しの処理が行われます。更新モードでオープンしたファイルは、このファイルに対して入力と出力の両方の処理を行うことができます。

ただし、出力処理は後にfflush、fseek、rewind関数が実行されることなしに入力処理を続けることはできません。

また同様に入力処理の後にfflush、fseek、rewind関数が実行されることなしに出力処理を続けることはできません。また、ファイルアクセスモードを示す文字列の後にオープンの方法を指示する文字が付くこともあります。

 

freopen

現在オープンされているストリーム入出力用ファイルをクローズし、新しいファイルを指定したファイル名で再オープンします。

 

[指定形式]

#include <stdio.h>

FILE *freopen(const char *fname, const char *mode, FILE *fp);

 

[引数]

fname 新しいファイル名を示す文字列へのポインタ

mode ファイルアクセスモードを示す文字列へのポインタ

fp 現在オープンされているストリーム入出力用ファイルのファイルポ インタ

 

[戻り値]

正常:fp

異常:NULL

 

[備考]

freopen関数は、まず、ファイルポインタfpの示すストリーム入出力用ファイルをクローズします(このクローズ処理が正しく行われない時でも以下の処理は続けます)。

次に、そのfpの指すFILE構造体を再使用して、ファイル名fnameで示すファイルを、ストリーム入出力用にオープンします。

freopen関数は一時にオープンするファイル数が限られているときなどに有効です。

freopen関数は通常、fpと同じ値を返しますが、エラーが発生した時は、NULLを返します。

 

setbuf

ストリーム入出力用のバッファ領域をユーザプログラム側で定義して設定します。

 

[指定形式]

#include <stdio.h>

void setbuf(FILE *fp, char buf[BUFSIZ]);

 

[引数]

fp ファイルポインタ

buf バッファ領域へのポインタ

 

[備考]

setbuf関数は、ファイルポインタfpの示すストリーム入出力用ファイルに対してbufの指す記憶域を入出力用のバッファ領域として使用するように定義します。この結果、大きさがBUFSIZのバッファ領域を使用した入出力処理が行われます。

 

setvbuf

ストリーム入出力用のバッファ領域をユーザプログラムの側で定義して設定します。

 

[指定形式]

#include <stdio.h>

long setvbuf(FILE *fp, char *buf, long type, size_t size);

 

[引数]

fp ファイルポインタ

buf バッファ領域へのポインタ

type バッファの管理方式

size バッファ領域の大きさ

 

[戻り値]

正常:0

異常:0以外

 

[備考]

setvbuf関数は、ファイルポインタfpの示すストリーム入出力用ファイルに対してbufの指す記憶域を入出力用のバッファ領域として使用するように定義します。

このバッファ領域の使用方法としては、以下の三通りの方法があります。

(a)

typeに_IOFBFを指定した時

入出力処理はすべてバッファ領域を使用して行います。

(b)

typeに_IOLBFを指定した時

入出力処理は行単位でバッファ領域を使用して行います。すなわち、入出力データは、改行文字が書かれた時、バッファ領域が一杯になった時、入力が要求された時にバッファ領域から取り出されることになります。

(c)

typeに_IONBFを指定した時

入出力処理はバッファ領域を使用せず行います。

setvbuf関数は通常0を返しますが、typeあるいはsizeに不正な値が与えられた時、あるいはバッファ領域の使用方法等の要求が受け入れられなかった時には0以外の値を返します。

バッファ領域は、オープンされているストリーム入出力用ファイルがクローズされる前に解放してはいけません。また、setvbuf関数は、ストリーム入出力用ファイルがオープンされてから入出力用処理が行われるまでの間で使用してください。

 

fprintf

書式に従って、ストリーム入出力用ファイルへデータを出力します。

 

[指定形式]

#include <stdio.h>

long fprintf(FILE *fp, const char *control [, arg] …);

 

[引数]

fp ファイルポインタ

control 書式を示す文字列へのポインタ

arg,... 書式に従って出力されるデータの並び

 

[戻り値]

正常:変換し出力した文字数

異常:負の値

 

[備考]

fprintf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、ファイルポインタfpの示すストリーム入出力用ファイルへ出力します。

fprintf関数は、通常は変換し出力したデータの個数を返しますが、エラー発生時には負の値を返します。

書式の仕様は以下のとおりです。

 

【書式の概要】

書式を表す文字列は、2種類の文字列から構成されます。

-

通常の文字

次の変換仕様を示す文字列以外の文字はそのまま出力されます。

-

変換仕様

変換仕様は、%で始まる文字列で、後に続く引数の変換方法を指定します。変換仕様の形式は次の規則に従います。

 

この変換仕様に対して、実際に出力する引数が無い時は、その動作は保証しません。また、変換仕様よりも実際に出力する引数の個数が多い時は、余分な引数はすべて無視されます。

 

【変換仕様の説明】

(a)

フラグ

符号を付けるなどの出力するデータに対する修飾を指定します。指定できるフラグの種類と意味を表 7.9に示します。

表 7.9

フラグの種類と意味

 

種類

意味

1

-

変換したデータの文字数が指定したフィールド幅より少ない時、そのデータをフィールド内で左詰めにして出力します。

2

+

符号付きのデータに変換する時、そのデータの符号に従って、変換したデータの先頭にプラスあるいはマイナス符号を付けます。

3

空白

符号付きのデータの変換において、変換したデータの先頭に符号が付かない時、そのデータの先頭に空白を付けます。

「+」と共に使用した時、本フラグは無視されます。

4

#

表6.10で説明する変換の種類に従って、変換後のデータに修飾を行います。

1. c、d、i、s、u変換の時

本フラグは無視されます。

2. o変換の時

変換したデータの先頭に0を付けます。

3. x(あるいはX)変換の時

変換したデータの先頭に0x(あるいは0X)を付けます。

4. e、E、f、g、G変換の時

変換したデータに小数点以下がない時でも、小数点を出力します。

また、g、G変換の時は、変換後のデータの後に付く0は取り除きません。

(b)

フィールド幅

変換したデータを出力する文字数を任意の10進数で指定します。

変換したデータの文字数がフィールド幅より少ない時、フィールド幅までそのデータの先頭に空白が付けられます(ただし、フラグとして'-'を指定した時は、データの後に空白が付けられます)。

もし、変換したデータの文字数がフィールド幅より大きい時は、フィールド幅は、変換結果を出力できる幅に拡張されます。

また、フィールド幅指定の先頭が0で始まっている時は、出力するデータの先頭には空白ではなく文字「0」が付けられます。

(c)

精度

表 7.10で説明する変換の種類に従って変換したデータの精度を指定します。

精度は、ピリオド(.)の後に10進整数を続ける形式で指定します。10進整数を省略した時は、0を指定したものと仮定します。

精度を指定した結果、フィールド幅の指定との間に矛盾が生じれば、フィールド幅の指定を無効とします。

各変換の種類と精度指定の意味を以下に示します。

-

d、i、o、u、x、X変換の時

変換したデータの最小の桁数を示します。

-

e、E、f変換の時

変換したデータの小数点以下の桁数を示します。

-

g、G変換の時

変換したデータの最大有効桁数を示します。

-

s変換の時

印字される最大文字数を示します。

(d)

パラメータのサイズ指定

d、i、o、u、x、X、e、E、f、g、G変換の時(表 7.10参照)

変換するデータのサイズ(short型、long型、long long型、long double型)を指定します。これ以外の変換の時は、本指定を無視します。表 7.10にサイズ指定の種類とその意味を示します。

表 7.10

パラメータのサイズ指定の種類とその意味

 

種類

意味

1

hh

d、i、o、u、x、X、a、A、e、E、f、F、gおよびG変換において、変換するデータがsigned char型あるいはunsigned char型であることを指定します。n変換において、変換するデータがsigned char型へのポインタ型であることを指定します。

2

h

d、i、o、u、x、X変換において、変換するデータがshort型あるいはunsigned short型であることを指定します。n変換において、変換するデータがshort型へのポインタ型であることを指定します。

3

l

d、i、o、u、x、X変換において、変換するデータがlong型、unsigned long型あるいは、double型であることを指定します。

4

L

e、E、f、g、G変換において、変換するデータがlong double型であることを指定します。

5

ll

d、i、o、u、x、X変換において、変換するデータがlong long型あるいは、unsigned long long型であることを指定します。n変換において、変換するデータがlong long型へのポインタ型であることを指定します。

6

j

d、i、o、u、x、X変換において、変換するデータがintmax_t型あるいは、uintmax_t型であることを指定します。n変換において、変換するデータがsize_t型へのポインタ型であることを指定します。

7

z

d、i、o、u、x、X変換において、変換するデータがsize_t型あるいは、size_t型に対応する符号付き整数型であることを指定します。n変換において、変換するデータがsize_t型へのポインタ型であることを指定します。

8

t

d、i、o、u、x、X変換において、変換するデータがptrdiff_t型あるいは、ptrdiff_t型に対応する符号なし整数型であることを指定します。n変換において、変換するデータがptrdiff_t型へのポインタ型であることを指定します。

(e)

変換文字

変換するデータをどのような形式に変換するかを指定します。

もし、変換するデータが構造体や配列型の時や、それらの型を指すポインタの時は、s変換で文字の配列を変換する時、p変換でポインタを変換する時を除いてその動作は保証しません。

表 7.11に変換文字と変換方式を示します。この表に述べられていない英文字を変換文字として指定した時は、その動作は保証しません。また、それ以外の文字を指定した時の動作はコンパイラによって異なります。

表 7.11

変換文字と変換の方式

 

変換文字

変換の種類

変換の方式

変換対象の型

精度に関する注意事項

1

d

d変換

int型データを符号付き10進数の文字列に変換します。d変換とi変換は同じ仕様です。

int型

精度指定は、最低で何文字出力されるかを示しています。もし、変換後の文字数が精度の値より少ない時は、文字列の先頭に0が付きます。また、精度を省略した時は、1が仮定されます。さらに、0の値を持つデータを精度に0を指定して変換し出力しようとした時は、何も出力されません。

2

i

i変換

int型

3

o

o変換

int型データを符号なしの8進数の文字列に変換します。

int型

4

u

u変換

int型データを符号なしの10進数の文字列に変換します。

int型

5

x

x変換

int型データを符号なしの16進数に変換します。16進文字にはa、b、c、d、e、fを用います。

int型

6

X

X変換

int型データを符号なしの16進数に変換します。16進文字にはA、B、C、D、E、Fを用います。

int型

7

f

f変換

double型データを「[-]ddd.ddd」の形式の10進数の文字列に変換します。

double型

精度の指定は、小数点以降の桁数を表します。小数点以降の文字が存在する時には、必ず小数点の前に1桁の数字が出力されます。精度を省略した時は、6が仮定されます。また、精度に0を指定した時は、小数点と小数点以降の文字は出力しません。出力するデータは丸められます。

8

F

F変換

double型

9

e

e変換

double型データを「[-]d.ddde±dd」の形式の10進数の文字列に変換します。指数は、少なくとも2桁出力されます。

double型

精度の指定は、小数点以降の桁数を表します。変換した文字は小数点の前に1桁の数字が出力され、小数点以降に精度に等しい桁数の数字が出力される形式となります。精度を省略した時は6が仮定されます。また、精度に0を指定した時は、小数点以降の文字は出力しません。出力するデータは丸められます。

10

E

E変換

double型データを「[-]d.dddE±dd」の形式の10進数の文字列に変換します。指数は、少なくとも2桁出力されます。

double型

11

g

g変換(あるいはG変換)

変換する値と有効桁数を指定する精度の値からf変換の形式で出力するかe変換(あるいはE変換)の形式で出力するかを決めdouble型データを出力します。もし、変換されたデータの指数が-4より小さいか、有効桁数を指定する精度より大きい時にはe変換(あるいはE変換)の形式に変換します。

double型

精度の指定は、変換されたデータの最大有効桁数を示します。

12

G

double型

13

a

a変換

double型データを「[-]0xh.hhhhp±d」の形式の16進数の文字列に変換します。指数は、少なくとも1桁出力されます。

double型

精度の指定は、小数点以降の桁数を表します。変換した文字は小数点の前に1桁の数字が出力され、小数点以降に精度に等しい桁数の数字が出力される形式となります。精度を省略した時は、正確な値を表現するのに充分な精度が仮定されます。また、精度に0 を指定した時は、小数点以降の文字は出力しません。出力するデータは丸められます。

14

A

A変換

double型データを「[-]0Xh.hhhhP±d」の形式の16進数の文字列に変換します。指数は、少なくとも1桁出力されます。

double型

15

c

c変換

int型のデータをunsigned char型データとし、そのデータに対応する文字に変換します。

int型

精度の指定は無効です。

16

s

s変換

char型へのポインタ型データが指す文字列を文字列の終了を示すヌル文字まで、あるいは、精度で指定された文字数分出力します(ただしヌル文字は出力されません。また、空白、水平タブ、改行文字は変換文字列に含まれません)。

char型へのポインタ型

精度の指定は出力する文字数を示します。もし、精度が省略された時は、データが指す文字列のヌル文字までの文字が出力されます(ただし、ヌル文字は出力されません。また、空白、水平タブ、改行文字は変換文字列に含まれません)。

17

p

p変換

データをポインタとして、コンパイラごとに定義された印字可能な文字列に変換します。

void型へのポインタ

精度の指定は無効です。

18

n

データの変換は生じません。

データはint型へのポインタ型とみなされ、このデータが指す記憶域にいままで、出力したデータの文字数を設定します。

int型へのポインタ型

 

19

%

データの変換は生じません。

%を出力します。

なし

 

 

(f)

フィールド幅あるいは精度に対する*指定

フィールド幅あるいは精度指定の値として*を指定することができます。この時は、この変換仕様に対応するパラメータの値がフィールド幅あるいは精度指定の値として使用されます。このパラメータが負のフィールド幅を持つ時は、正のフィールド幅にフラグ-が指定されたと解釈します。また、負の精度を持つ時は、精度が省略されたものと解釈します。

 

snprintf

データを書式に従って変換し、指定した領域へ出力します。

 

[指定形式]

#include <stdio.h>

long snprintf(char *restrict s, size_t n, const char *restrict control [, arg] ...);

 

[引数]

s データを出力する記憶域へのポインタ

n 出力する文字数

control 書式を示す文字列へのポインタ

arg,... 書式に従って出力されるデータ

 

[戻り値]

変換した文字数

 

[備考]

snprintf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、sの指す記憶域へ出力します。

変換して出力した文字列の最後には、ヌル文字が付加されます。このヌル文字はリターン値である出力した文字数の中には含まれません。書式の仕様の詳細はfprintf関数を参照してください。

 

vsnprintf

データを書式に従って変換し、指定した領域へ出力します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vsnprintf(char *restrict s, size_t n, const char *restrict control, va_list arg);

 

[引数]

s データを出力する記憶域へのポインタ

n 出力する文字数

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

変換した文字数

 

[備考]

vsnprintf関数は、可変個引数をargで置き換えたsnprintfと等価です。

vsnprintf関数の呼出し前に、va_startマクロでargを初期化してください。

vsnprintf関数は、va_endマクロを呼び出しません。

 

fscanf

ストリーム入出力用ファイルからデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdio.h>

long fscanf(FILE *fp, const char *control[, ptr] ...);

 

[引数]

fp ファイルポインタ

control 書式を示す文字列へのポインタ

ptr,... 入力したデータを格納する記憶域へのポインタ

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:入力データの変換を行う前に入力データが終了した時:EOF

 

[備考]

fscanf関数は、ファイルポインタfpの示すストリーム入出力用ファイルからデータを入力し、controlが指す書式を文字列に従って変換、編集して、その結果をptrの指す記憶域へ格納します。

データを入力するための書式の仕様を以下に示します。

 

【書式の概要】

書式を表す文字列は、以下の3種類の文字列から構成されます。

-

空白文字

空白(' ')、水平タブ('\t')あるいは改行文字('\n')を指定すると、入力データを次の空白類文字でない文字まで読み飛ばす処理を行います。

-

通常の文字

上の空白文字でも%でもない文字を指定すると、入力データを1文字入力します。ここで入力した文字は書式を表す文字列の中に指定した文字と一致していなければなりません。

-

変換仕様

変換仕様は、%で始まる文字列で、書式を表す文字列の後に続く引数の指す領域に入力データを変換して格納する方法を指定します。変換仕様の形式は次の規則に従います。

%[*][フィールド幅][変換後のデータのサイズ]変換文字

書式中の変換仕様に対して入力したデータを格納する記憶域へのポインタがない時は、その動作は保証しません。また、書式が終了したにもかかわらず、入力データを格納する記憶域へのポインタが残っている時は、そのポインタは無視されます。

 

【変換仕様の説明】

*指定

入力したデータを引数が指す記憶域に格納することを抑止します。

フィールド幅

入力するデータの最大文字数を10進数字で指定します。

変換後のデータのサイズ

d、i、o、u、x、X、e、E、f変換の時(表 7.13参照)、変換後のデータのサイズ(short型、long型、long long型、long double型)を指定します。これ以外の変換の時は、本指定を無視します。表 7.12にサイズ指定の種類とその意味を示します。

表 7.12

変換後のデータのサイズ指定の種類とその意味

 

種類

意味

1

h

d、i、o、u、x、X変換において、変換後のデータはshort型であることを指定します。

2

l

d、i、o、u、x、X変換において、変換後のデータはlong型であることを指定します。

また、e、E、f変換において、変換後のデータはdouble型であることを指定します。

3

L

e、E、f変換において、変換後のデータは、long double型であることを指定します。

4

ll

d、i、o、u、x、X変換において、変換後のデータはlong long型であることを指定します。

-

変換文字

入力するデータは、各変換文字が指定する変換の種類に従って変換します。ただし、空白類文字を読み込んだ場合、変換の対象として許されていない文字を読み込んだ場合、あるいは指定されたフィールド幅を超えた場合は処理を終了します。

表 7.13

変換文字と変換の内容

 

変換文字

変換の
種類

変換の方式

対応するパラメータの型名

1

d

d変換

10進数字の文字列を整数型データに変換します。

整数型

2

i

i変換

先頭に符号が付いている10進数字の文字列、あるいは最後にu(U)またはl(L)が付いている10進数字の文字列を整数型データに変換します。また、先頭が0x(あるいは0X)で始まっている文字列は、16進数字として解釈し、文字列をint型データに変換します。さらに、先頭が0で始まっている文字列は、8進数字として解釈し文字列をint型データに変換します。

整数型

3

o

o変換

8進数字の文字列を整数型データに変換します。

整数型

4

u

u変換

符号なしの10進数字の文字列を整数型データに変換します。

整数型

5

x

x変換

16進数字の文字列を整数型データに変換します。

x変換とX変換に意味の違いはありません。

整数型

6

X

X変換

7

s

s変換

空白、水平タブ、改行文字を読み込むまでをひとつの文字列として変換します。文字列の最後にはヌル文字を付加します(変換したデータを設定する文字列は、ヌル文字を含めて格納できるサイズが必要です)。

文字型

8

c

c変換

1文字を入力します。この時、入力する文字が空白類文字であっても読み飛ばすことはしません。もし、空白類文字以外の文字だけを読み込む時は、%1sと指定してください。また、フィールド幅が指定されている時は、その指定分の文字が読み込まれます。したがって、この時、変換したデータを格納する記憶域は、指定分の大きさが必要です。

char型

9

e

e変換

浮動小数点型を示す文字列を浮動小数点型データに変換します。e変換とE変換、g変換とG変換にそれぞれ意味の違いはありません。入力形式はstrtod関数で表現できる浮動小数点型です。

浮動小数点型

10

E

E変換

11

f

f変換

12

g

g変換

13

G

G変換

14

p

p変換

fprintf関数において、p変換で変換される形式の文字列をポインタ型データに変換します。

void型へのポインタ型

15

n

データの変換は生じません。

データの入力は行わず、いままでに入力したデータの文字数が設定されます。

整数型

16

[

[変換

[の後に文字の集合、その後に]を指定します。この文字集合は、文字列を構成する文字の集合を定義しています。もし、文字集合の最初の文字が^でない時は、入力データはこの文字集合にない文字が最初に読み込まれるまでをひとつの文字列として入力します。もし、最初の文字が^の時は、^を除いた文字集合の文字が最初に読み込まれるまでをひとつの文字列として入力します。入力した文字列の最後には自動的にヌル文字を付加します(変換したデータを設定する文字列は、ヌル文字を含めて格納できるサイズが必要です)。

文字型

17

%

データの変換は生じません。

%を読み込みます。

なし

変換文字が表 7.13に示す文字以外の英文字の時は、その動作は保証しません。また、その他の文字の時は、その動作は処理系定義です。

 

printf

データを書式に従って変換し、標準出力ファイル(stdout)へ出力します。

 

[指定形式]

#include <stdio.h>

long printf(const char *control[, arg]...);

 

[引数]

control 書式を示す文字列へのポインタ

arg,... 書式に従って出力されるデータ

 

[戻り値]

正常:変換し出力した文字数

異常:負の値

 

[備考]

printf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、標準出力ファイル(stdout)へ出力します。

書式の仕様の詳細はfprintf関数を参照してください。

 

vfscanf

ストリーム入出力用ファイルからデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vfscanf(FILE *restrict fp, const char *restrict control , va_list arg);

 

[引数]

fp ファイルポインタ

control 書式を示すワイド文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:入力データの変換を行う前に入力データが終了した時:EOF

 

[備考]

vfscanf関数は可変個引数並びをargで置き換えたfscanfと等価です。

vfscanf 関数の呼出し前に、va_start マクロでarg を初期化してください。

vfscanf 関数はva_end マクロを呼び出しません。

 

scanf

標準入力ファイル(stdin)からデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdio.h>

long scanf(const char *control[, ptr] …);

 

[引数]

control 書式を示す文字列へのポインタ

ptr,... 入力変換したデータを格納する記憶域へのポインタ

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:EOF

 

[備考]

scanf関数は、標準入力ファイル(stdin)からデータを入力し、controlが指す書式を示す文字列に従って、そのデータを変換、編集して、その結果をptrの指す記憶域へ格納します。

scanf関数は、入力変換に成功したデータの個数をリターン値として返します。最初の変換の前に標準入力ファイルが終了した時にはEOFを返します。

書式の仕様の詳細はfscanf関数を参照してください。

%e変換では、double型の場合はl、long double型の場合はLで指定します。デフォルトの型はfloat型です。

 

vscanf

指定した記憶域からデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vscanf(const char *restrict control , va_list arg);

[引数]

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:入力データの変換を行う前に入力データが終了した時:EOF

 

[備考]

vscanf関数は、可変個数引数をarg で置き換えたscanf と等価です。

vscanf 関数の呼出し前に、va_start マクロでarg を初期化してください。

vscanf 関数はva_end マクロを呼びません。

 

sprintf

データを書式に従って変換し、指定した領域へ出力します。

 

[指定形式]

#include <stdio.h>

long sprintf(char *s, const char *control [, arg] …);

 

[引数]

s データを出力する記憶域へのポインタ

control 書式を示す文字列へのポインタ

arg,... 書式に従って出力されるデータ

 

[戻り値]

変換した文字数

 

[備考]

sprintf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、sの指す記憶域へ出力します。

変換して出力した文字列の最後には、ヌル文字が付加されます。このヌル文字はリターン値である出力した文字数の中には含まれません。

書式の仕様の詳細はfprintf関数を参照してください。

 

sscanf

指定した記憶域からデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdio.h>

long sscanf(const char *s, const char *control [, ptr] …);

 

[引数]

s 入力するデータがある記憶域

control 書式を示す文字列へのポインタ

ptr,... 入力変換したデータを格納する記憶域へのポインタ

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:EOF

 

[備考]

sscanf関数は、sの指す記憶域からデータを入力し、controlが指す書式を示す文字列に従って、そのデータを変換、編集して、その結果をptrの指す記憶域へ格納します。

sscanf関数は、入力変換に成功したデータの個数を返します。また、最初の変換の前に入力するデータが終了した時にはEOFを返します。

書式の仕様の詳細はfscanf関数を参照してください。

 

vsscanf

指定した記憶域からデータを入力し、書式に従って変換します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vsscanf(const char *restrict s, const char *restrict control , va_list arg);

 

[引数]

s 入力するデータがある記憶域

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:入力変換に成功したデータの個数

異常:入力データの変換を行う前に入力データが終了した時:EOF

 

[備考]

vsscanf関数は、可変個数引数をarg で置き換えたsscanf と等価です。

vsscanf 関数の呼出し前に、va_start マクロでarg を初期化してください。

vsscanf 関数はva_end マクロを呼びません。

 

vfprintf

可変個の引数リストを書式に従って、指定したストリーム入出力用ファイルに出力します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vfprintf(FILE *fp, const char *control, va_list arg);

 

[引数]

fp ファイルポインタ

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:変換し出力した文字数

異常:負の値

 

[備考]

vfprintf関数は、controlが指す書式を示す文字列に従って、可変個の引数リストを順に変換、編集し、fpの示すストリーム入出力用ファイルへ出力します。

vfprintf関数は、変換し出力したデータの個数を返しますが出力エラーが発生した時は負の値を返します。

また、vfprintf関数ではva_endマクロは呼び出しません。

書式の仕様の詳細はfprintf関数を参照してください。

引数リストを示すargは、va_start(およびそれに続くva_argマクロ)によって初期化されていなければなりません。

 

vprintf

可変個の引数リストを書式に従って標準出力ファイル(stdout)に出力します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vprintf(const char *control, va_list arg);

 

[引数]

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:変換し出力した文字数

異常:負の値

 

[備考]

vprintf関数は、controlが指す書式を示す文字列に従って、可変個の引数リストを順に変換、編集し、標準出力ファイルへ出力します。

vprintf関数は、変換し出力したデータの個数を返しますが出力エラーが発生した時は負の値を返します。

また、vprintf関数ではva_endマクロは呼び出しません。

書式の仕様の詳細はfprintf関数を参照してください。

引数リストを示すargは、va_start(およびそれに続くva_argマクロ)によって初期化されていなければなりません。

 

vsprintf

可変個の引数リストを書式に従って、指定した記憶域に出力します。

 

[指定形式]

#include <stdarg.h>

#include <stdio.h>

long vsprintf(char *s, const char *control, va_list arg);

 

[引数]

s データを出力する記憶域へのポインタ

control 書式を示す文字列へのポインタ

arg 引数リスト

 

[戻り値]

正常:変換した文字数

異常:負の数

 

[備考]

vsprintf関数は、controlが指す書式を示す文字列に従って、可変個の引数リストを順に変換、編集し、sにより指される記憶域へ出力します。

変換して出力した文字列の最後にヌル文字が付加されます。このヌル文字はリターン値である出力した文字数の中には含まれません。

書式の仕様の詳細はfprintf関数を参照してください。

引数リストを示すargは、va_start(およびそれに続くva_argマクロ)によって初期化されていなければなりません。

 

fgetc

ストリーム入出力用ファイルから1文字入力します。

 

[指定形式]

#include <stdio.h>

long fgetc(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

正常: ファイルの終了の時 :EOF

ファイルの終了でない時 :入力した文字

異常: EOF

 

[備考]

読み込みエラーが発生した時、そのファイルに対してのエラー指示子が設定されます。

fgetc関数は、ファイルポインタfpの示すストリーム入出力用ファイルから1文字入力します。

fgetc関数は、通常入力した1文字を返しますが、ファイルの終了やエラー発生の時は、EOFを返します。また、ファイルの終了の時には、そのファイルに対するファイル終了指示子が設定されます。

 

fgets

ストリーム入出力用ファイルから文字列を入力します。

 

[指定形式]

#include <stdio.h>

char *fgets(char *s, long n, FILE *fp);

 

[引数]

s 文字列を入力する記憶域へのポインタ

n 文字列を入力する記憶域のバイト数

fp ファイルポインタ

 

[戻り値]

正常: ファイルの終了の時 :NULL

ファイルの終了でない時 :s

異常: NULL

 

[備考]

fgets関数は、ファイルポインタfpの示すストリーム入出力用ファイルから、ポインタsの指す記憶域に文字列を入力します。

fgets関数は、n-1文字まであるいは改行文字を入力するまで、またはファイルの終わりになるまで文字を入力し、入力文字列の最後にヌル文字を付け加えます。

fgets関数は通常、文字列を入力する記憶域へのポインタsを返しますが、ファイルが終了した時やエラー発生の時はNULLを返します。

ファイルが終了した時は、sが指す記憶域の内容は変化しませんが、エラー発生の時は、sが指す記憶域の内容は保証しません。

 

fputc

ストリーム入出力用ファイルへ1文字出力します。

 

[指定形式]

#include <stdio.h>

long fputc(long c, FILE *fp);

 

[引数]

c 出力する文字

fp ファイルポインタ

 

[戻り値]

正常:出力した文字

異常:EOF

 

[備考]

書き出しエラーが発生した時は、そのファイルに対してエラー指示子が設定されます。

fputc関数は、文字cをファイルポインタfpの示すストリーム入出力ファイルへ出力します。

fputc関数は、通常出力した文字cを返しますが、エラー発生の時は、EOFを返します。

 

fputs

ストリーム入出力用ファイルへ文字列を出力します。

 

[指定形式]

#include <stdio.h>

long fputs(const char *s, FILE *fp);

 

[引数]

s 出力する文字列へのポインタ

fp ファイルポインタ

[戻り値]

正常:0

異常:0以外

 

[備考]

fputs関数は、sの指すヌル文字の直前までの文字列をファイルポインタfpの示すストリーム入出力用ファイルへ出力します。この時、文字列の終了を示すヌル文字は出力されません。

fputs関数は、通常0を返しますが、エラー発生の時は、0以外の値を返します。

 

getc

ストリーム入出力用ファイルから1文字入力します。

 

[指定形式]

#include <stdio.h>

long getc(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

正常: ファイルの終了の時 :EOF

ファイルの終了でない時 :入力した文字

異常: EOF

 

[備考]

読み込みエラーが発生した時、そのファイルに対してエラー指示子が設定されます。

getc関数は、ファイルポインタfpの示すストリーム入出力用ファイルから1文字入力します。

getc関数は、通常入力した1文字を返しますがファイルの終了やエラー発生の時は、EOFを返します。またファイルの終了の時には、そのファイルに対するファイル終了指示子が設定されます。

 

getchar

標準入力ファイル(stdin)から、1文字入力します。

 

[指定形式]

#include <stdio.h>

long getchar(void);

 

[戻り値]

正常: ファイルの終了の時 :EOF

ファイルの終了でない時 :入力した文字

異常: EOF

 

[備考]

読み込みエラーが発生した時、そのファイルに対してエラー指示子が設定されます。

getchar関数は標準入力ファイル(stdin)から1文字入力します。

getchar関数は、通常入力した1文字を返しますが、ファイルの終了やエラー発生の時はEOFを返します。また、ファイルの終了の時には、そのファイルに対するファイル終了指示子が設定されます。

 

gets

標準入力ファイル(stdin)から文字列を入力します。

 

[指定形式]

#include <stdio.h>

char *gets(char *s);

 

[引数]

s 文字列を入力する記憶域へのポインタ

[戻り値]

正常: ファイルの終了の時 :NULL

ファイルの終了でない時 :s

異常: NULL

 

[備考]

gets関数は、標準入力ファイル(stdin)から、sで始まる記憶域へ文字列を入力します。

gets関数は、ファイルの終了か、改行文字を入力するまで文字を入力し、改行文字の代わりにヌル文字を付け加えます。

gets関数は、通常文字列を入力する記憶域へのポインタsを返しますが、標準入力ファイルの終了やエラー発生の時は、NULLを返します。

標準入力ファイルが終了した時は、sが指す記憶域の内容は変化しませんが、エラー発生の時はsが指す記憶域の内容は保証しません。

 

putc

ストリーム入出力用ファイルへ1文字出力します。

 

[指定形式]

#include <stdio.h>

long putc(long c, FILE *fp);

 

[引数]

c 出力する文字

fp ファイルポインタ

 

[戻り値]

正常:出力した文字

異常:EOF

 

[備考]

書き出しエラーが発生した時は、そのファイルに対してエラー指示子が設定されます。

putc関数は、文字cをファイルポインタfpの示すストリーム入出力ファイルへ出力します。

putc関数は、通常出力した文字cを返しますが、エラー発生の時はEOFを返します。

 

putchar

標準出力ファイル(stdout)へ1文字出力します。

 

[指定形式]

#include <stdio.h>

long putchar(long c);

 

[引数]

c 出力する文字

 

[戻り値]

正常:出力した文字

異常:EOF

 

[備考]

書き出しエラーが発生した時は、そのファイルに対してエラー指示子が設定されます。

putchar関数は、文字cを標準出力ファイル(stdout)へ出力します。putcharマクロは、通常出力した文字cを返しますが、エラー発生の時はEOFを返します。

 

puts

標準出力ファイル(stdout)へ文字列を出力します。

 

[指定形式]

#include <stdio.h>

long puts(const char *s);

 

[引数]

s 出力する文字列へのポインタ

 

[戻り値]

正常:0

異常:0以外

 

[備考]

puts関数は、sの指す文字列を標準出力ファイル(stdout)へ出力します。この時、文字列の終了を示す文字は出力されず、代わりに改行文字を出力します。

puts関数は、通常0を返しますが、エラー発生の時は0以外の値を返します。

 

ungetc

ストリーム入出力用ファイルへ1文字を戻します。

 

[指定形式]

#include <stdio.h>

long ungetc(long c, FILE *fp);

 

[引数]

c 戻す文字

fp ファイルポインタ

 

[戻り値]

正常:戻した文字

異常:EOF

 

[備考]

ungetc関数は、文字cをファイルポインタfpの示すストリーム入出力用ファイルへ戻します。

また、ここで戻された文字は、fflush、fseek、rewind関数を呼び出さなければ次の入力データとなります。

ungetc関数は、通常戻した文字cを返しますが、エラー発生の時はEOFを返します。

ungetc関数がfflush、fseek、rewind関数を実行することなく2回以上呼び出された時の動作は保証しません。また、ungetc関数が実行されるとファイルに対する現在の位置指示子が一つ戻されますが、この位置指示子がすでにファイルの先頭に位置している時は、位置指示子は保証しません。

 

fread

ストリーム入出力用ファイルから、指定した記憶域にデータを入力します。

 

[指定形式]

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t n, FILE *fp);

 

[引数]

ptr データを入力する記憶域へのポインタ

size 1メンバのバイト数

n 入力するメンバの数

fp ファイルポインタ

 

[戻り値]

sizeもしくはnが0の時 :0

size,nがともに0でない時 :入力に成功したメンバ数

 

[備考]

fread関数は、ファイルポインタfpの示すストリーム入出力用ファイルからptrが指す記憶域にsizeで指定したバイト数を1メンバとしたデータをnメンバ入力します。この時、ファイルに対する位置指示子は入力したバイト数分進められます。

fread関数は、実際に入力に成功したメンバ数を返しますので、通常nと同じ値になります。しかし、ファイルが終了した時やエラー発生の時は、それまで入力に成功したメンバ数を返しますので、nより小さな値となります。ファイルの終了かエラー発生かの区別は、ferror、feof関数を用いて行ってください。

sizeもしくはnが0の時、リターン値として0を返し、ptrの指す記憶域の内容は変化しません。また、エラーが発生した時、または、メンバの途中までしか入力できなかった時は、そのファイルの位置指示子は保証しません。

 

fwrite

メモリ領域からストリーム入出力用ファイルにデータを出力します。

 

[指定形式]

#include <stdio.h>

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);

 

[引数]

ptr 出力するデータを格納している記憶域へのポインタ

size 1メンバのバイト数

n 出力するメンバの数

fp ファイルポインタ

 

[戻り値]

出力に成功したメンバ数

 

[備考]

fwrite関数は、ptrの指す記憶域から、ファイルポインタfpの示すストリーム入出力用ファイルに、sizeで指定したバイト数を1メンバとしたデータをnメンバ出力します。

この時、ファイルに対する位置指示子は出力したバイト数進められます。

fwrite関数は、実際に出力に成功したメンバ数を返しますので、通常nと同じ値になります。しかし、エラー発生の時はそれまで出力に成功したメンバ数を返しますので、nより小さな値となります。

エラー発生の時、そのファイルの位置指示子は保証しません。

 

fseek

ストリーム入出力用ファイルの現在の読み書き位置を移動します。

 

[指定形式]

#include <stdio.h>

long fseek(FILE *fp, long offset, long type);

 

[引数]

fp ファイルポインタ

offset オフセットの種類で指定された位置からのオフセット

type オフセットの種類

 

[戻り値]

正常:0

異常:0以外

 

[備考]

fseek関数は、ファイルポインタfpの示すストリーム入出力用ファイルの現在の読み書き位置をオフセットの種類typeで指定した場所からoffsetバイト先の位置に移動します。

オフセットの種類を表6.13に示します。

fseek関数は、通常は0を返しますが、不適当な要求に対しては0以外の値を返します。

表 7.14

オフセットの種類

 

オフセットの種類

意味

1

SEEK_SET

ファイルの先頭からoffsetバイト先の位置に移動します。この時、offsetで指定する値は0か正でなければなりません。

2

SEEK_CUR

ファイルの現在位置からoffsetバイト先の位置に移動します。この時、offsetで指定する値が正ならばファイルの後方に、負ならばファイルの先頭に向かって移動します。

3

SEEK_END

ファイルの終わりからoffsetバイト先の位置に移動します。この時offsetで指定する値は0か負でなければなりません。

テキストファイルの時は、オフセットの種類はSEEK_SETで、かつoffsetは0かそのファイルに対するftell関数によって返された値でなければなりません。また、fseek関数を呼び出すことによってungetc関数の効果はなくなりますので注意が必要です。

 

ftell

ストリーム入出力用ファイルの現在の読み書き位置を求めます。

 

[指定形式]

#include <stdio.h>

long ftell(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

現在の位置指示子の位置(テキストファイル)

ファイルの先頭から現在位置までのバイト数(バイナリファイル)

 

[備考]

ftell関数は、ファイルポインタfpの示すストリーム入出力用ファイルの現在の読み書き位置を求めます。

ftell関数は、バイナリファイルの時、ファイルの先頭から現在位置までのバイト数を返しますが、テキストファイルの時は、ここで返した値がfseek関数で使用できるように処理系定義の値を位置指示子の位置として返します。

ftell関数を2回テキストファイルに適用した時、そのリターン値の差が実際のファイル上の隔たりを表すことにはなりません。

 

rewind

ストリーム入出力用ファイルの現在の読み書き位置を、ファイルの先頭に移動します。

 

[指定形式]

#include <stdio.h>

void rewind(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[備考]

rewind関数は、ファイルポインタfpの示すストリーム入出力用ファイルの現在の読み書き位置をファイルの先頭に移動します。

また、rewind関数は、そのファイルに対する終了指示子とエラー指示子をクリアします。

rewind関数を呼び出すことによって、ungetc関数の効果はなくなりますので、注意が必要です。

 

clearerr

ストリーム入出力用ファイルのエラー状態をクリアします。

 

[指定形式]

#include <stdio.h>

 

[引数]

fp ファイルポインタ

 

[備考]

clearerr関数は、ファイルポインタfpの示すストリーム入出力用ファイルに対するエラー指示子と終了指示子をクリアします。

 

feof

ストリーム入出力用ファイルが終わりであるかどうかを判定します。

 

[指定形式]

#include <stdio.h>

long feof(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

ファイルが終わりの時 :0以外

ファイルが終わりでない時 :0

 

[備考]

feof関数は、ファイルポインタfpの示すストリーム入出力用ファイルが終了したかどうかを判定します。

feof関数は、指定したストリーム入出力用ファイルに対するファイル終了指示子を調べ、設定されていればファイルが終わりであるとして、0以外の値を返します。設定されていなければ、ファイルはまだ終わりではないとして0を返します。

 

ferror

ストリーム入出力用ファイルがエラー状態であるかどうかを判定します。

 

[指定形式]

#include <stdio.h>

long ferror(FILE *fp);

 

[引数]

fp ファイルポインタ

 

[戻り値]

ファイルがエラー状態の時 :0以外

ファイルがエラー状態でない時 :0

 

[備考]

ferror関数は、ファイルポインタfpの示すストリーム入出力用ファイルがエラー状態であるかどうかを判定します。

ferror関数は、指定したストリーム入出力用ファイルに対するエラー指示子を調べ、設定されていれば、エラー状態にあるとして0以外の値を返します。設定されていなければ、エラー状態ではないとして0を返します。

 

perror

標準エラーファイル(stderr)に、エラー番号に対応したエラーメッセージを出力します。

 

[指定形式]

#include <stdio.h>

void perror(const char *s);

 

[引数]

s エラーメッセージへのポインタ

 

[備考]

perror関数は標準エラーファイル(stderr)へsで示されるエラーメッセージとerrnoとを対応させ出力します。

出力するメッセージは、もし、sがNULLでなく、sの指す文字列がヌル文字でなければ、sの指す文字列にコロンと空白とその後に処理系定義のエラーメッセージを続け、最後に改行文字を付けた形式で出力されます。