C Library User 手册(18)
- 10.16 stdio.h
- 10.16.1 BUFSIZ
- 10.16.2 clearerr
- 10.16.3 EOF
- 10.16.4 fclose
- 10.16.5 feof
- 10.16.6 ferror
- 10.16.7 fflush
- 10.16.8 fgetc
- 10.16.9 fgetpos
- 10.16.10 fgets
- 10.16.11 FILE
- 10.16.12 FILENAME_MAX
- 10.16.13 fopen
- 10.16.14 FOPEN_MAX
- 10.16.15 fpos_t
- 10.16.16 fprintf
- 10.16.17 fputc
- 10.16.18 fputs
- 10.16.19 fread
- 10.16.20 freopen
- 10.16.21 fscanf
- 10.16.22 fseek
- 10.16.23 fseeko
- 10.16.24 fsetpos
- 10.16.25 ftell
- 10.16.26 ftello
- 10.16.27 fwrite
- 10.16.28 getc
- 10.16.29 getc_unlocked
- 10.16.30 getchar
- 10.16.31 getchar_unlocked
- 10.16.32 gets
10.16 stdio.h
包括标准头文件<stdio.h>,以便你可以对流和文件进行输入和输出操作。
/* MACROS */
#define _IOFBF <integer constant expression>
#define _IOLBF <integer constant expression>
#define _IONBF <integer constant expression>
#define BUFSIZ <integer constant expression >= 256> #define EOF <integer constant expression < 0>
#define FILENAME_MAX <integer constant expression > 0> #define FOPEN_MAX <integer constant expression >= 8> #define L_tmpnam <integer constant expression > 0> #define NULL <either 0, 0L, or (void *)0> [0 in C++] #define SEEK_CUR <integer constant expression> #define SEEK_END <integer constant expression> #define SEEK_SET <integer constant expression> #define TMP_MAX <integer constant expression >= 25> #define stderr <pointer to FILE rvalue>
#define stdin <pointer to FILE rvalue>
#define stdout <pointer to FILE rvalue>
/* TYPES */ typedef o-type FILE; typedef o-type fpos_t;
typedef ui-type size_t;
/* FUNCTIONS */
void clearerr(FILE *stream);
int fclose(FILE *stream);
int feof(FILE *stream);
int ferror(FILE *stream);
int fflush(FILE *stream);
FILE *fopen(const char *restrict filename, const char *restrict
mode);
FILE *freopen(const char *restrict filename, const char *restrict
mode, FILE *stream);
int remove(const char *filename);
int rename(const char *old, const char *new);
void rewind(FILE *stream);
void setbuf(FILE *restrict stream, char *restrict buf);
int setvbuf(FILE *restrict stream, char *restrict buf, int mode,
size_t size);
FILE *tmpfile(void);
char *tmpnam(char *s);
int fseek(FILE *stream, long offset, int mode);
int fseeko(FILE *stream, off_t offset, int whence); [POSIX] off_t ftello(FILE *stream); [POSIX]
int fsetpos(FILE *stream, const fpos_t *pos);
int fgetpos(FILE *restrict stream, fpos_t *restrict pos);
long ftell(FILE *stream);
int fgetc(FILE *stream);
char *fgets(char *restrict s, int n, FILE *restrict stream); size_t fread(void *restrict ptr, size_t size, size_t nelem, FILE
*restrict stream); int getc(FILE *stream);
int getchar(void);
int getc_unlocked(FILE *stream); [POSIX]
int getchar_unlocked(void); [POSIX]
char *gets(char *s);
int ungetc(int c, FILE *stream);
int fputc(int c, FILE *stream);
int fputs(const char *restrict s, FILE *restrict stream);
size_t fwrite(const void *restrict ptr, size_t size, size_t nelem,
FILE *restrict stream);
void perror(const char *s);
int putc(int c, FILE *stream);
int putchar(int c);
int putc_unlocked(int c, FILE *stream); [POSIX]
int putchar_unlocked(int c); [POSIX]
int puts(const char *s);
int fscanf(FILE *restrict stream, const char *restrict format,
...);
int scanf(const char *restrict format, ...);
int sscanf(const char *restrict s, const char *restrict format,
...);
int fprintf(FILE *restrict stream, const char *restrict format,
...);
int printf(const char *restrict format, ...);
int sprintf(char *restrict s, const char *restrict format, ...); int vfprintf(FILE *restrict stream, const char *restrict format,
va_list ap);
int vprintf(const char *restrict format, va_list ap);
int vsprintf(char *restrict s, const char *restrict format, va_list
ap);
10.16.1 BUFSIZ
#define BUFSIZ <integer constant expression >= 256>
该宏产生setbuf所使用的流缓冲区的大小。
10.16.2 clearerr
void clearerr(FILE *stream);
该函数清除了流媒体的文件结束和错误指示器。
10.16.3 EOF
#define EOF <integer constant expression < 0>
该宏产生的返回值用于信号流的结束或报告一个错误的
条件。
10.16.4 fclose
int fclose(FILE *stream);
该函数关闭了与流媒体相关的文件。fclose将任何缓冲输出写入文件,如果是自动分配的流缓冲区,则将其删除,并删除流和文件之间的关联。不要在随后的表达式中使用流的值。
10.16.5 feof
int feof(FILE *stream);
如果为流设置了文件结束指示器,该函数返回一个非零值
流。
10.16.6 ferror
int ferror(FILE *stream);
如果为流媒体设置了错误指示器,该函数返回一个非零值。
10.16.7 fflush
int fflush(FILE *stream);
该函数将任何缓冲输出写入与stream流相关的文件,如果成功则返回0,否则返回EOF。如果流是一个空指针,fflush将任何缓冲输出写到所有为输出打开的文件中。
10.16.8 fgetc
int fgetc(FILE *stream);
该函数从输入流中读取下一个字符c(如果存在),推进文件位置指示器(如果定义),并返回(int)(无符号字符)c。如果该函数设置了文件结束指示器或错误指示器,它将返回EOF。
10.16.9 fgetpos
int fgetpos(FILE *restrict stream, fpos_t *restrict pos);
该函数在*pos中存储流的文件位置指示器,如果成功则返回0;否则,该函数在errno中存储一个正值并返回一个非零值。
10.16.10 fgets
char *fgets(char *restrict s, int n, FILE *restrict stream);
该函数从输入流中读取字符,并将它们存储在数组的连续元素中,从s开始,一直到存储n-1个字符,存储一个NL字符,或者设置文件结束或错误指示符。如果fgets存储了任何字符,它的结论是在数组的下一个元素中存储一个空字符。如果它存储了任何字符,并且没有为流设置错误指示器,则返回s;否则,它返回一个空指针。如果它设置了错误指示器,那么数组的内容是不确定的。
10.16.11 FILE
typedef o-type FILE;
该类型是一个对象类型o-type,存储了一个流的所有控制信息。函数fopen和freopen分配了所有读写函数使用的FILE对象。
10.16.12 FILENAME_MAX
#define FILENAME_MAX <integer constant expression > 0>
该宏产生你必须提供的最大尺寸的字符数组,以容纳一个
文件名。
10.16.13 fopen
FILE *fopen(const char *restrict filename, const char *restrict mode);
该函数以文件名filename打开文件,将其与一个流相关联,并返回一个指向控制流的对象的指针。如果打开失败,它返回一个空指针。mode的初始字符决定了程序如何操作流,以及它是否将流解释为文本或二进制。初始字符必须是以下序列中的一个。
■r"-打开一个现有的文本文件进行阅读。
■w"–创建一个文本文件或打开并截断一个现有的文本文件,用于写入。
■"a"–创建一个文本文件或打开一个现有的文本文件,用于写入。在每次写入之前,文件位置指示器被定位在文件的末端。
■rb"–打开一个现有的二进制文件进行读取。
■wb"–创建一个二进制文件或打开并截断一个现有的二进制文件,用于写作
■ab"-创建一个二进制文件或打开一个现有的二进制文件,用于写入。在每次写入之前,文件位置指示器被定位在文件的末端(可能在任意的空字节填充之后)。
■r+"-打开一个现有的文本文件进行读写。
■w+"–创建一个文本文件,或者打开并截断一个现有的文本文件,以便进行读写。
创建一个文本文件或打开并截断一个现有的文本文件,用于读写
■a+"–创建一个文本文件或打开一个现有的文本文件,进行读写。文件位置指示器在每次写入前都会被定位在文件的末端
■r+b "或 “rb+”-打开一个现有的二进制文件进行读写。
■w+b "或 “wb+”–创建一个二进制文件或打开并截断一个现有的二进制文件。
创建一个二进制文件或打开并截断一个现有的二进制文件,用于读写
■"a+b "或 “ab+”–创建一个二进制文件或打开一个现有的二进制文件,进行读写。在每次写入之前,文件位置指示器被定位在文件的末端(可能是在任意的空字节填充之后)。
如果你打开一个文件进行读写,目标环境可以打开一个二进制文件而不是一个文本文件。如果该文件不是交互式的,流是完全缓冲的。
10.16.14 FOPEN_MAX
#define FOPEN_MAX <integer constant expression >= 8>
该宏产生了目标环境允许同时打开的最大文件数
同时打开的文件(包括stderr、stdin和stdout)。
10.16.15 fpos_t
typedef o-type fpos_t;
该类型是一个对象的类型o-type,你声明该对象用于保存由fsetpos存储的文件位置指示器的值。
位置指示器的值,该指示器由 fsetpos 存储并由 fgetpos 访问。
10.16.16 fprintf
int fprintf(FILE *restrict stream, const char *restrict format, ...);
该函数在格式格式和任何附加参数的控制下,生成格式化的文本,并将每个生成的字符写入流中。它返回生成的字符数,如果该函数为流设置了错误指示器,则返回一个负值。
10.16.17 fputc
int fputc(int c, FILE *stream);
该函数将字符(unsigned char)c写入输出流流,推进文件位置指示器(如果定义),并返回(int)(unsigned char)c。如果该函数为流设置了错误指示器,它将返回EOF。
10.16.18 fputs
int fputs(const char *restrict s, FILE *restrict stream);
该函数从C语言字符串s中访问字符,并将它们写入输出流。该函数不写终止的空字符。如果没有设置错误指示器,它返回一个非负值;否则,它返回EOF。
10.16.19 fread
size_t fread(void *restrict ptr, size_t size, size_t nelem, FILE *restrict stream);
该函数从输入流中读取字符,并将它们存储在数组的连续元素中,该数组的第一个元素具有(char )ptr的地址,直到该函数存储sizenelem字符或设置文件结束或错误指示器。它返回n/size,其中n是它读取的字符数。如果n不是size的倍数,存储在最后一个元素的值是不确定的。如果该函数设置了错误指示器,文件位置指示器是不确定的。
10.16.20 freopen
FILE *freopen(const char *restrict filename, const char *restrict mode, FILE *stream);
该函数关闭了与流媒体关联的文件(就像调用fclose一样);然后它用文件名filename打开文件,并将文件与流媒体关联(就像调用fopen(filename, mode)一样)。如果打开成功,它返回流;否则,它返回一个空指针。
10.16.21 fscanf
int fscanf(FILE *restrict stream, const char *restrict format, ...);
该函数在格式格式和任何附加参数的控制下,扫描格式化的文本。它从流中获取每个扫描的字符。它返回匹配和分配的输入项目的数量,或者如果函数在为流设置文件结束或错误指示器之前没有存储值,它返回EOF。
10.16.22 fseek
int fseek(FILE *stream, long offset, int mode);
该函数设置流的文件位置指示器(由偏移量和模式指定)。
和模式),清除该流的文件结束指示器,如果成功则返回0。对于二进制流,offset是以字节为单位的有符号偏移。
■如果模式的值是SEEK_SET,fseek将偏移量加到文件开头的文件位置指示器上。
■如果模式的值是SEEK_CUR,fseek将偏移量加到当前文件位置的指示器上。
■如果模式的值是SEEK_END,fseek将偏移量加到文件末端的文件位置指示器上(可能在任意的空字符填充后)。
fseek将文件位置指示器设置为这个加法的结果。对于一个文本流。
■如果模式的值是SEEK_SET,fseek将文件位置指示器设置为offset编码的值,这个值要么是先前成功调用ftell返回的值,要么是表示文件开始的0。
■如果模式的值是SEEK_CUR,并且偏移量是0,fseek将文件位置指示器保持在当前值。
■如果模式的值是SEEK_END且偏移量为0,fseek将文件位置指示器设置为文件的结束。
该函数没有定义其他参数值的组合。
10.16.23 fseeko
int fseeko(FILE *stream, off_t offset, int whence); [POSIX] The fseeko function is identical to fseek, except that the offset argument is of type
off_t.
10.16.24 fsetpos
int fsetpos(FILE *stream, const fpos_t *pos);
该函数将流的文件位置指示器设置为存储在*pos中的值,清除流的文件结束指示器,如果成功返回0。否则,该函数在errno中存储一个正值并返回一个非零值。
10.16.25 ftell
long ftell(FILE *stream);
该函数返回流的文件位置指示器的编码形式,或者在errno中存储一个正值并返回值-1。对于二进制文件,一个成功的返回值给出了从文件开始的字节数。对于一个文本文件,目标环境可以在编码的文件位置指标值的表示和范围上有所不同。
10.16.26 ftello
off_t ftello(FILE *stream); [POSIX]
ftello函数与ftell相同,只是返回值类型为off_t。
10.16.27 fwrite
size_t fwrite(const void *restrict ptr, size_t size, size_t nelem, FILE *stream);
该函数将字符写入输出流,从数组的连续元素中获取数值,该数组的第一个元素具有(char )ptr地址,直到该函数写入sizenelem字符或设置错误指示器。它返回n/size,其中n是它写入的字符数。如果该函数设置了错误指示器,那么文件位置指示器是不确定的。
10.16.28 getc
int getc(FILE *stream);
该函数与fgetc(stream)具有相同的效果,只是getc的宏版
可以多次评估流。
10.16.29 getc_unlocked
int getc_unlocked(FILE *stream); [POSIX]
getc_unlocked函数提供与getc相同的功能,但不对其操作的流进行隐式锁定。在多线程程序中,它只能在调用线程已经成功锁定流的范围内使用。
10.16.30 getchar
int getchar(void);
该函数的效果与fgetc(stdin)相同,从流中读取一个字符
stdin
10.16.31 getchar_unlocked
int getchar_unlocked(void); [POSIX]
getchar_unlocked函数提供与getchar相同的功能,但不对其操作的流进行隐式锁定。在多线程程序中,它只能在调用线程已经成功锁定流的范围内使用。
10.16.32 gets
char *gets(char *s);
该函数从数据流stdin中读取字符,并将其存储在数组的连续元素中,数组的第一个元素的地址为s,直到该函数读取一个NL字符(不存储)或设置文件结束或错误指示器。如果Get读到任何字符,它的结论是在数组的下一个元素中存储一个空字符。如果它读到了任何字符并且没有为流设置错误指示器,则返回s;否则,它返回一个空指针。如果它设置了错误指示器,那么数组内容是不确定的。gets读取和存储的字符数不能被限制。使用fgets代替。