トップ 一覧 ping 検索 ヘルプ 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" または "rb",読み取り専用でopen
,"w"または"wb",書き込み用にopenし、もとのfileの長さを0に切り詰め
,"a"または"ab",書き込み用にopenし、fileの最後に追加
,"r+"または"rb+"または"r+b",更新用にopenする
,"w+"または"wb+"または"w+b",更新用にopenし、もとのfileの長さを0に切り詰める
,"a+"または"ab+"または"a+b",更新用に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を利用すべき。

----
この本からの覚書。
{{amazon 4797327014}}