!!!C 標準入出力ライブラリ [Programming C] *標準入出力libraryとそのheader file stdio.h は低水準入出力system callに対する柔軟なinterfaceを提供する。 *低水準file descriptorと同じ方法で使用する。 *低水準file descriptorに相当するものは、stream と呼ばれ、構造体へのpointer FILE * として実装されている。 !!fopen #include 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 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 size_t fwrite(void *ptr, size_t size, size_t ntimes, FILE *stream); freadとよく似たinterfaceをもち、指定されたdata bufferからdata recordを出力streamに書き込む。 *書き込みに成功したrecord数を返す。 !!fclose #include int fclose(FILE *stream); 指定されたstreamをcloseし、まだ書き込まれていないdataを書き込む。 *標準入出力libraryではdataが、buffereing されるため、dataの書き込みを保障する必要がある場合、fcloseを使用する。 *programが正常に終了した場合は、まだopenされているすべてのfile stream に対して fcloseが自動的に呼び出される。 !!fflush #include int fflush(FILE *stream); file streamにあるすべてのdataを直ちに書き込みます。 *fcloseを呼び出すと、暗黙的にfflushされます。 !!fseek #include int fseek(FILE *stream, long int offset, int whence); lseek system call のfile stream 版で、stream上で次に読み書きを行う場所を指定する。 *成功した場合に、0を、失敗した場合に -1を返す。 !!fgetc、getc、getchar #include 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 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 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}}