cppreference.com -> 標準 C 入出力関数 -> 詳細

標準 C 入出力関数


clearerr

文法:

  #include <stdio.h>
  void clearerr( FILE *ストリーム );

clearall関数は与えられたストリームのエラーフラグやEOFフラグをリセットする。 エラーが発生している時には、perror()を用いて具体的に発生しているエラーの情報を得ることができる。

関連トピック:
feof(), ferror(), perror().

fclose

文法:

  #include <stdio.h>
  int fclose( FILE *ストリーム );

fclose()関数は与えられたストリームを閉じ、ストリーム用に割り当てられていたバッファを解放する。処理が成功した場合にはゼロを返す。何か発生した場合にはEOFが返される。

関連トピック:
fopen(), freopen(), fflush().

feof

文法:

  #include <stdio.h>
  int feof( FILE *ストリーム );

feof()関数は与えられたファイルストリームがファイルの終端に達している場合にはゼロでない値を返す。

関連トピック:
clearerr(), ferror(), perror(), putc(), getc().

ferror

文法:

  #include <stdio.h>
  int ferror( FILE *ストリーム );

ferror()関数はストリーム のエラーを調べ、エラーがなければゼロを返し、エラーが発生しているばあにはそれ以外の値が返される。エラーが発生している場合にはperror()を呼ぶとどのようなエラーが発生しているか分かる。

関連トピック:
clearerr(), feof(), perror(),

fflush

文法:

  #include <stdio.h>
  int fflush( FILE *ストリーム );

与えられたストリーム が出力ストリームの場合には、出力ストリームのバッファを強制的に出力する。与えられたストリーム が入力ストリームの場合には受信バッファをクリアする。fflush()はデバッグの時に使用すると良い。バッファの内容を書き出す前にセグメントエラーでプログラムが落ちる可能性があるため、fflush()で強制的に書き出すのが有用である。デバッグ出力の後にfflush(STDOUT)を直接呼び出すと、正確なタイミングで出力が表示される。

    printf( "最初にfflush()呼ぶ前です\n" );
    fflush( STDOUT );
    shady_function();
    printf( "2回目にfflush()呼ぶ前です\n" );
    fflush( STDOUT );
    dangerous_dereference();
関連トピック:
fclose(), fopen(), fread(), fwrite(), getc() putc().

fgetc

文法:

  #include <stdio.h>
  int fgetc( FILE *ストリーム );

ストリーム から次の一文字を取ってきて返す。ファイルの終端に達していたり、エラーが発生している場合にはEOFを返す。

関連トピック:
fputc(), getc(), putc(), fopen().

fgetpos

文法:

  #include <stdio.h>
  int fgetpos( FILE *ストリーム, fpos_t *位置 );

fgetpos()関数は、与えられたファイルストリーム の、ファイル内の位置を表すポインタを位置 変数に格納する。位置 変数の型はstdio.hで定義されているfpos_t型であり、FILE型が取りうる、可能な位置をすべて保持することができる。fgetpos()は成功するとゼロを返し、失敗するとゼロ以外の値を返す。

関連トピック:
fsetpos(), fseek(), ftell().

fgets

文法:

  #include <stdio.h>
  char *fgets( char *文字列バッファ, int 文字数, FILE *ストリーム );

fgets()関数は最大でnum - 1文字のデータをファイルストリームから読み込み、文字列バッファに書き出す。ストリーム から読み込まれた文字列は、文字列バッファ に書き出される。fgets()は行末に到達した場合には処理が中止され、文字列バッファ には改行で終端される文字列が書き込まれる。gets()がnum - 1 文字に達するか、EOFに到達した場合にはNULLで終端された文字列が書き込まれる。fgets()の処理が成功した場合には文字列バッファ へのポインタが返され、そうでない場合にはNULLが返される。


fopen

文法:

  #include <stdio.h>
  FILE *fopen( const char *ファイル名, const char *モード );

fopen()関数はファイル名 で指定されたファイルを開き、それに関連するストリームを返す。エラーがあればfopenははNULLを返す。モード は、どのようにファイルを扱うかということを決定する。例えば、入力、出力、などである。

モード意味
"r"読み込み用にテキストファイルを開く
"w"書き込み用にテキストファイルを作成する
"a"追記用にテキストファイルを開く
"rb"読み込み用にバイナリファイルを開く
"wb"書き込み用にバイナリファイルを作成する
"ab"追記用にバイナリファイルを開く
"r+"読み書き用にテキストファイルを開く
"w+"読み書き用にテキストファイルを開く
"a+"読み書き用にテキストファイルを開く
"rb+"読み書き用にバイナリファイルを開く
"wb+"読み書き用にバイナリファイルを開く
"ab+"読み書き用にバイナリファイルを開く

サンプル:

    char ch;
    FILE *input = fopen( "stuff", "r" );
    ch = getc( input );
    

fprintf

文法:

  #include <stdio.h>
  int fprintf( FILE *ストリーム, const char *フォーマット, ... );

fprintf()は、ストリーム に対してフォーマット で指定したフォーマットで情報を送り出す関数である。fprintf()のふぉまっとはprintf()のように動作する。返値は正常に完了した場合にはfprintf()が送信した文字数であり、エラーが発生したら負になる。サンプル:

    char name[20] = "メアリー";
    FILE *out;
    out = fopen( "output.txt", "w" );
    if( out != NULL )
      fprintf( out, "こんにちわ、%s\n", name );
関連トピック:
printf(), fscanf()

fputc

文法:

  #include <stdio.h>
  int fputc( int 文字, FILE *ストリーム );

fputc()は文字 を与えられた出力用のストリーム に書き出す関数である。返値はエラーがなければ文字 で、エラーが発生したらEOFである。

関連トピック:
fgetc(), fopen(), fprintf(), fread(), and fwrite().

fputs

文法:

  #include <stdio.h>
  int fputs( const char *文字列, FILE *ストリーム );

fputs()は文字列 を与えられた出力用のストリーム に書き出す関数である。返値はエラーがなければ正の数値で、エラーが発生したらEOFである。

関連トピック:
fgets(), gets(), puts(), fprintf(), fscanf().

fread

文法:

  #include <stdio.h>
  int fread( void *読み込みバッファ, size_t データ長, size_t データ数, FILE *ストリーム );

fread()はデータ数 個分のオブジェクト(それぞれの大きさはデータ長 バイト)を読み込み、読み込みバッファに指定された配列に書き出す関数である。データは読み込みストリームから読み込まれる。返値は読み込んだデータ数である。エラーが発生しているかどうかを調べるには、feof(), を使う。

関連トピック:
fwrite(), fopen(), fscanf(), fgetc(), getc()

freopen

文法:

  #include <stdio.h>
  FILE *freopen( const char *ファイル名, const char *モード, FILE *ストリーム );

freopen()は既存のストリームを別のファイルやモードに割り当て直す関数である。この関数を呼んだ後は、与えられたストリームはファイル名, モードに設定される。この関数の返値は新しいストリームであり、エラーが発生している場合にはNULLが返される。

関連トピック:
fopen(), fclose()

fscanf

文法:

  #include <stdio.h>
  int fscanf( FILE *ストリーム, const char *フォーマット, ... );

fscanf()は与えられたストリームからscanf()と同じような方法でデータを読み出す関数である。fscanf()の返値は実際に値が代入された変数の数を示しており、読み出すことができなかった場合にはEOFを返す。

関連トピック:
scanf(), fprintf()

fseek

文法:

  #include <stdio.h>
  int fseek( FILE *ストリーム, long オフセット, int 探索開始位置 );

fseek()関数は与えられたストリーム内のファイルの位置を設定する。探索開始位置 はstdio.hで定義されている以下の値のうちのどれかを定義する。

名前説明
SEEK_SETファイルの最初から探索する
SEEK_CUR現在の位置から探索する
SEEK_ENDファイルの終端から探索する

fseek()は成功するとゼロを、失敗するとゼロ以外の値を返す。fseek()は終端よりも大きい位置に移動することはできるが、ファイルの最初よりも前に移動することはできない。fseek()関数は、ストリームのEOFフラグを解除する。

関連トピック:
ftell(), rewind(), fopen(), fgetpos(), fsetpos()

fsetpos

文法:

  #include <stdio.h>
  int fsetpos( FILE *ストリーム, const fpos_t *位置 );

fsetpos()関数は、与えられたストリームファイルの位置ポインタを位置オブジェクトで表される場所に移動する。fpos_t構造体はstdio.hで定義されている。返値はエラーがなければゼロで、エラーが発生したらゼロ以外の値である。

関連トピック:
fgetpos(), fseek(), ftell()

ftell

文法:

  #include <stdio.h>
  long ftell( FILE *ストリーム );

ftell()関数は、ストリーム内のファイルの位置を返す。エラーが発生している場合には-1を返す。

関連トピック:
fseek(), fgetpos()

fwrite

文法:

  #include <stdio.h>
  int fwrite( const void *バッファ, size_t データ長, size_t データ数, FILE *ストリーム );

fwrite()は、バッファ 配列に書き込まれた、データ数 個のデータ長バイトのデータをストリーム に書き出す関数である。返値は書き込んだデータのオブジェクト数である。

関連トピック:
fread(), fscanf(), getc(), fgetc()

getc

文法:

  #include <stdio.h>
  int getc( FILE *ストリーム );

getc()はストリーム から次の文字を読み込んで返す関数である。ファイルの終端に達している場合にはEOFを返す。getc()はfgetc()とまったく同じである。サンプル:

    char ch;
    FILE *input = fopen( "stuff", "r" );
    
    ch = getc( input );
    while( ch != EOF ) {
      printf( "%c", ch );
      ch = getc( input );
    }
関連トピック:
fputc(), fgetc(), putc(), fopen()

getchar

文法:

  #include <stdio.h>
  int getchar( void );

getchar()はSTDINの次の文字を返す関数である。ファイルの終端に達した場合にはEOFを返す。

関連トピック:
fputc(), fgetc(), putc(), fopen()

gets

文法:

  #include <stdio.h>
  char *gets( char *文字列バッファ );

gets()はSTDINから、改行、あるいはEOFに達するまで文字列を読み込み、文字列バッファに書き出す関数である。返値はエラーが発生していない場合には読み込んだ文字列を返し、そうでない場合にはNULLを返す。

関連トピック:
fputs(), fgetc(), fgets(), puts()

perror

文法:

  #include <stdio.h>
  void perror( const char *文字列 );

perror()関数は、文字列と、グローバル変数のerrnoに対応する定義済みのエラーメッセージを表示する。


printf

文法:

  #include <stdio.h>
  int printf( const char *フォーマット, ... );

printf()関数はフォーマット と、printf()に渡された他の引数の内容をSTDOUTに出力する関数である。フォーマット 文字列には二種類の要素が含まれる。画面に表示される文字と、printf()に渡された他の変数の内容を表示する方法を定義するフォーマットコマンドである。基本的にはフォーマット 文字列は、テキストの中にある特別な文字の部分に他の引数がマッピングされる。サンプル:

    char name[20] = "ボブ";
    int age = 21;
    printf( "こんにちわ%s, あなたは%d歳です。\n", name, age );

表示:

    こんにちわボブ, あなたは21歳です。

%sは最初の引数の文字列をここに挿入する、という意味を持つ。%dは次の引数の数値をこの位置に表示するということを示している。引数の型ごとに%コードがある。また、長さを指定したりするコマンドもある。

コードフォーマット
%c文字
%d符号付きの数値
%i符号付きの数値
%e小文字のeを使った科学記法
%E大文字のEを使った科学記法
%f浮動小数点数
%g値の大きさによって%eか%f形式になる
%G値の大きさによって%Eか%F形式になる
%o8進数
%s文字列
%u符号なし数値
%x小文字の16進数
%X大文字の16進数
%pポインタ
%nint型のポインタに対して使用し、それもあでに出力した文字数をその変数に記録する
%%'%'符号

%符号とコマンドの間の数値によって、最小のフィールド幅を指定することができる。長さが十分でない場合にはスペースかゼロが使われる。もしゼロで埋めたい場合には最小フィールド幅指定子の前にゼロを置く。精度を指定することもできる。精度はフォーマットコードごとに異なる意味を持つ。

printf()のすべての出力は%の後ろに-(マイナス)を付けない限りは右詰で出力される。例えば:

    %-12.4f

この場合は浮動小数点数は12文字のスペースが確保され、小数点の後ろの数字は4文字で、左詰出力される。 %d, %i, %o, %u, %xの型指定子はlhの文字を前に付けることで、データ型をlong, shortとして扱うことができる(e.g. %hdはshort intとなる)。 %e, %f, %gの型指定子はlを前に付けてdoubleとして扱うことができるようになる。 %g, %f, %e型指定子の%の直後に'#'文字を付けた場合には、例え小数点以下に続く数値がなかったとしても小数点が表示されるようになる。%xの%の直後に'#'を付けた場合には16進数を表す'0x'という文字が表示されるようになる。%oの場合には0という数値が常に先頭に追加されるようになる。

出力文字列の中にはエスケープシーケンスを含めることもできる。

printf()の返値は出力した文字数で、エラーが発生した場合には負の数値が返される。

関連トピック:
scanf(), fprintf()

putc

文法:

  #include <stdio.h>
  int putc( int 文字, FILE *ストリーム );

putc()は文字ストリーム に書き出す関数である。返り値は書き込んだ文字か、エラーが発生した場合にはEOFである。サンプル:

    char ch;
    FILE *input, *output;
    input = fopen( "tmp.c", "r" );
    output = fopen( "tmpCopy.c", "w" );
    ch = getc( input );
    while( ch != EOF ) {
      putc( ch, output );
      ch = getc( input );
    }
    fclose( input );
    fclose( output );

tmp.cというファイルのコピーをtmpCopy.cという名前で作る。

関連トピック:
fgetc(), fputc(), getchar(), putchar().

putchar

文法:

  #include <stdio.h>
  int putchar( int 文字 );

putchar()関数は 文字STDOUTに出力する。

    putchar( 文字 );

は以下のコードと同じ意味を持つ。

    putc( 文字, STDOUT );

putchar()の返り値は書き込んだ文字で、エラーが発生した場合にはEOFである。

関連トピック:
putc()

puts

文法:

  #include <stdio.h>
  int puts( char *文字列 );

puts()は文字列STDOUTに書き出す関数である。 成功した場合には負ではない数値を返し、失敗したときにはEOFを返す。

関連トピック:
putc(), gets(), printf().

remove

文法:

  #include <stdio.h>
  int remove( const char *ファイル名 );

remove()はファイル名 で指定されたファイルを削除する関数である。成功するとゼロを返す。エラーが発生するとゼロではない数値を返す。

関連トピック:
rename()

rename

文法:

  #include <stdio.h>
  int rename( const char *旧ファイル名, const char *新ファイル名 );

rename()はファイルの名前を旧ファイル名 から新ファイル名 に変更する関数である。成功するとゼロを返す。エラーが発生するとゼロではない数値を返す。

関連トピック:
remove()

rewind

文法:

  #include <stdio.h>
  void rewind( FILE *ストリーム );

rewind()はストリーム のファイルの位置ポインタを先頭に戻し、EOFフラグをクリアする。

関連トピック:
fseek()

scanf

文法:

  #include <stdio.h>
  int scanf( const char *フォーマット, ... );

stdinから読み込み、与えられたフォーマット に従い、与えられた引数にデータを格納する関数である。この関数はprintf() に似た動作をする。フォーマット 文字列はコントロール文字、ホワイトスペース文字、その他の文字などによって構成される。コントロール文字は%文字が先頭に付く。

コントロール文字説明
%c一文字
%d10進数の数字
%i数値
%e, %f, %g浮動小数点数
%o8進数
%s文字列
%x16進数
%pポインタ
%nan integer equal to the number of characters read so far
%u符号なしの数値
%[]文字の集合
%%%記号

scanf()は入力を読み込み、フォーマット とマッチングを行う。コントロール文字を読み込むと、その値を次の変数に格納する。ホワイトスペース(タブ、スペースなど)はスキップされる。ホワイトスペース以外の文字は入力と比較される。%とコントロール文字の間に数値が書いてあった場合にはその文字数だけスキャンを行う。scanf()が%[]コントロール文字を読み込んだ場合には括弧内にあった文字だけを変数に格納する。scanf()の返値は読み込みに成功した変数の数であり、エラーが発生したらEOFを返す。

関連トピック:
printf(), fscanf().

setbuf

文法:

  #include <stdio.h>
  void setbuf( FILE *ストリーム, char *バッファ );

setbuf()はストリーム の使うバッファをバッファ に設定する。バッファ がNULLの場合にはバッファリングを行わないように設定される。もし標準的なバッファサイズを使用する場合には、BUFSIZの長さを使用するべきである。

関連トピック:
fopen(), fclose(), setvbuf(),

setvbuf

文法:

  #include <stdio.h>
  int setvbuf( FILE *ストリーム, char *バッファ, int モード, size_t バッファ長 );

setvbuf()はストリーム の使うバッファをバッファ長の大きさを持つバッファ に設定し、バッファのモードもモード に設定する。モードには以下のものが使用可能である:

関連トピック:
setbuf(),

sprintf

文法:

  #include <stdio.h>
  int sprintf( char *バッファ, const char *フォーマット, ... );

sprintf()は、書き込まれる対象がバッファ ということを除いてprintf()に非常によく似ている。返値はバッファに書き込まれた文字数である。サンプル:

    char string[50];
    int file_number = 0;
    
    sprintf( string, "file.%d", file_number );
    file_number++;
    output_file = fopen( string, "w" );
関連トピック:
printf(), fsprintf(),

sscanf

文法:

  #include <stdio.h>
  int sscanf( const char *バッファ, const char *フォーマット, ... );

sscanf()は、書き込まれる対象がバッファ ということを除いてscanf()に非常によく似ている。

関連トピック:
scanf(), fscanf(),

tmpfile

文法:

  #include <stdio.h>
  FILE *tmpfile( void );

tempfile()は重複のない名前を持つテンポラリファイルを開き、そのFILEポインタを返す。エラーが発生した場合にはnullが返される。

関連トピック:
tmpnam(),

tmpnam

文法:

  #include <stdio.h>
  char *tmpnam( char *名前格納バッファ );

tmpnam()関数は重複のないファイル名を生成して名前格納バッファ に保存する。tmpnam()はTMP_MAX回呼ぶことができる。

関連トピック:
tmpfile(),

ungetc

文法:

  #include <stdio.h>
  int ungetc( int 文字, FILE *ストリーム );

ungetc()は読み込んだ文字ストリーム に戻す関数である。

関連トピック:
getc(),

vprintf, vfprintf, and vsprintf

文法:

  #include <stdarg.h>
  #include <stdio.h>
  int vprintf( char *フォーマット, va_list 引数ポインタ );
  int vfprintf( FILE *ストリーム, const char *フォーマット, va_list 引数ポインタ );
  int vsprintf( char *バッファ, char *フォーマット, va_list 引数ポインタ );

これらの関数はprintf(), fprintf(), and sprintf()などに非常に良く似ている。異なるのは、引数リストが引数リストのポインタになっている点である。va_listはstdarg.hで定義されており、va_arg()によって使用される。サンプル:

    void error( char *fmt, ... ) {
      va_list args;
      
      va_start( args, fmt );
      fprintf( stderr, "Error: " );
      vfprintf( stderr, fmt, args );
      fprintf( stderr, "\n" );
      va_end( args );
      exit( 1 );
    }