トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

C 標準入出力ライブラリ



目次



記事一覧

キーワード

C 標準入出力ライブラリ

[Programming C]

  • 標準入出力libraryとそのheader file stdio.h は低水準入出力system callに対する柔軟なinterfaceを提供する。
  • 低水準file descriptorと同じ方法で使用する。
  • 低水準file descriptorに相当するものは、stream と呼ばれ、構造体へのpointer FILE * として実装されている。

 fopen

#include <stdio.h>
FILE *fopen(const char *filename, const char * mode);

fopen関数は、低水準openに似た機能を持つ。

  • fopenは、filenameに指定された名前のfileをopenし、streamを関連付ける。
  • modeは、fileをopenする方法を指定するparameter。
  • 成功すると、nullではない、FILE *pointerを返す。
  • 失敗した場合、stdio.hで定義されている、NULL値を返す。
mode 内容
r 読み取り専用でopen
w 書き込み用にopenし、もとのfileの長さを0に切り詰め
a 書き込み用にopenし、fileの最後に追加
r+ 更新用にopenする
w+ 更新用にopenし、もとのfileの長さを0に切り詰める
a+ 更新用にopenし、fileの最後に追加する

※bはファイルがbinaryであることを示す。

 fread

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t ntimes, FILE *stream);

file stream からdataを読み込む。

  • dataは」streamからptrが示すdata buffer に読み込まれる。
  • data record の指定は、record size、size っと、転送するrecord 数 ntimes によって行う。

 fwrite

#include <stdio.h>
size_t fwrite(void *ptr, size_t size, size_t ntimes, FILE *stream);

freadとよく似たinterfaceをもち、指定されたdata bufferからdata recordを出力streamに書き込む。

  • 書き込みに成功したrecord数を返す。

 fclose

#include <stdio.h>
int fclose(FILE *stream);

指定されたstreamをcloseし、まだ書き込まれていないdataを書き込む。

  • 標準入出力libraryではdataが、buffereing されるため、dataの書き込みを保障する必要がある場合、fcloseを使用する。
  • programが正常に終了した場合は、まだopenされているすべてのfile stream に対して fcloseが自動的に呼び出される。

 fflush

#include <stdio.h>
int fflush(FILE *stream);

file streamにあるすべてのdataを直ちに書き込みます。

  • fcloseを呼び出すと、暗黙的にfflushされます。

 fseek

#include <stdio.h>
int fseek(FILE *stream, long int offset, int whence);

lseek system call のfile stream 版で、stream上で次に読み書きを行う場所を指定する。

  • 成功した場合に、0を、失敗した場合に -1を返す。

 fgetc、getc、getchar

#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

fgetc関数は、file stream から次のbyteを文字として返す。最後に達するかエラーだと、EOFを返す。
getc関数は、macroとして実装できる点を除けば、fgetcと同じ。
getchar関数は、getc(stdin)と等価。標準入力から次の文字を読み込む。

 fputc、putc、putchar

#include <stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);

  • fputc 関数は、出力file stream に1文字を書き込み、書き込んだ文字を返す。
  • errorが発生した場合EOFを返す。
  • macroとして実装できる点を除けば、putcとfputcは同じ。
  • putcharは、putc(c, stdout)と等価

 fgets、gets

#include <stdio.h>
char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);

  • fgets関数は、入力 file stream から文字列を読み込む。
  • 改行文字に出会うか、n-1文字が転送されるか、fileの終わりに達するまで、s で指定されたbuffer に書き込まれる。
  • 改行文字に出会った場合、改行文字および、'\0'が buffer に書き込まれる。
  • 1回の呼び出しで読み取られる文字数は 最大 n-1 これは、buffer の最後に 文字列の終了を示す'\0'が含まれるため。
  • fgetsは、成功するとbufferへのpointer s を返す。
  • streamがfileの末尾に達した場合、EOF indicator を set し、null pointer を返す。
  • 読み取りerrorが起きた場合、null pointer を返し、errnoにerrorの内容を示す値を設定

  • gets関数は、標準入力から読み取りを行う点、改行文字を破棄する点以外は、fgetsと同じ
  • getsは、転送bufferがあふれる可能性があるため、通常はfgetsを利用すべき。


この本からの覚書。



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.