C语言标准库 - stdio.h1 输入与输出<stdio.h>头文件<stdio.h>定义了用于输入和输出的函数、类型和宏。最重要的类型是用于声明文件指针的FILE。另外两个常用的类型是size_t和fpos_t,size_t是由运算符sizeof产生的无符号整类型;fpos_t类型定义能够唯一说明文件中的每个位置的对象。由头部定义的最有用的宏是EOF,其值代表文件的结尾。 1.1 文件操作1.1.1 fopen
打开以filename所指内容为名字的文件,返回与之关联的流。 mode决定打开的方式,可选值如下:
后六种方式允许对同一文件进行读和写,要注意的是,在写操作和读操作的交替过程中,必须调用fflush()或文件定位函数如fseek()、fsetpos()、rewind()等。 文件名filename的长度最大为FILENAME_MAX个字符,一次最多可打开FOPEN_MAX个文件(在<stdio.h>中定义)。 1.1.2 freopen
以mode指定的方式打开文件filename,并使该文件与流stream相关联。freopen()先尝试关闭与stream关联的文件,不管成功与否,都继续打开新文件。 该函数的主要用途是把系统定义的标准流stdin、stdout、stderr重定向到其他文件。 1.1.3 fflush
对输出流(写打开),fflush()用于将已写到缓冲区但尚未写出的全部数据都写到文件中;对输入流,其结果未定义。如果写过程中发生错误则返回EOF,正常则返回0。 fflush(NULL)用于刷新所有的输出流。 程序正常结束或缓冲区满时,缓冲区自动清仓。 1.1.4 fclose
刷新stream的全部未写出数据,丢弃任何未读的缓冲区内的输入数据并释放自动分配的缓冲区,最后关闭流。 1.1.5 remove
删除文件filename。 1.1.6 rename
把文件的名字从oldfname改为newfname。 1.1.7 tmpfile
以方式'wb+'创建一个临时文件,并返回该流的指针,该文件在被关闭或程序正常结束时被自动删除。 1.1.8 tmpnam
若参数s为NULL(即调用tmpnam(NULL)),函数创建一个不同于现存文件名字的字符串,并返回一个指向一内部静态数组的指针。 若s非空,则函数将所创建的字符串存储在数组s中,并将它作为函数值返回。s中至少要有L_tmpnam个字符的空间。 tmpnam函数在每次被调用时均生成不同的名字。在程序的执行过程中,最多只能确保生成TMP_MAX个不同的名字。注意tmpnam函数只是用于创建一个名字,而不是创建一个文件。 1.1.9 setvbuf
控制流stream的缓冲区,这要在读、写以及其他任何操作之前设置。 如果buf非空,则将buf指向的区域作为流的缓冲区,如果buf为NULL,函数将自行分配一个缓冲区。 size决定缓冲区的大小。 mode指定缓冲的处理方式,有如下值:
1.1.10 setbuf
如果buf为NULL,则关闭流stream的的缓冲区;否则setbuf函数等价于: (void)setvbuf(stream, buf, _IOFBF, BUFSIZ) 注意自定义缓冲区的尺寸必须为BUFSIZ个字节。 1.2 格式化输出1.2.1 fprintf
按照format说明的格式把变量表中变量内容进行转换,并写入stream指向的流。 格式化字符串由两种类型的对象组成:普通字符(它们被拷贝到输出流)与转换规格说明(它们决定变量的转换和输出格式)。每个转换规格说明均以字符%开头,以转换字符结束。如果%后面的字符不是转换字符,那么该行为是未定义的。 转换字符列表如下:
在%与转换字符之间依次可以有下列标记:
在格式串中字段宽度和精度二者都可以用*来指定,此时该值可通过转换对应的变量来获得,这些变量必须是int类型。 1.2.2 printf
printf(...)等价于fprintf(stdout, ...)。 1.2.3 sprintf
与printf()基本相同,但输出写到字符数组buf而不是stdout中,并以'\0'结束。 注意,sprintf()不对buf进行边界检查,buf必须足够大,以便能装下输出结果。 1.2.4 snprintf
除了最多为num-1个字符被存放到buf指向的数组之外,snprintf()和sprintf()完全相同。数组以'\0'结束。 该函数不属于C89(C99增加的),但应用广泛,所以将其包括了进来。 1.2.5 vprintf 1.2.6 vfprintf 1.2.7 vsprintf 1.2.8 vsnprintf
这几个函数与对应的printf()等价,但变量表由arg代替。参见第7节有关<stdarg.h>头文件的讨论。 vsnprintf是C99增加的。 1.3 格式化输入1.3.1 fscanf
在格式串format的控制下从流stream中读入字符,把转换后的值赋给后续各个变量,在此每一个变量都必须是一个指针。当格式串format结束时函数返回。 格式串format通常包含有用于指导输入转换的转换规格说明。格式串中可以包含:
转换规格说明决定了输入字段的转换方式。通常把结果保存在由对应变量指向的变量中。然而,如果转换规格说明中包含有赋值屏蔽字符*,例如%*s,那么就跳过对应的输入字段,不进行赋值。输入字段是一个由非空白符组成的字符串,当遇到空白符或到达最大字段宽(如果有的话)时,对输入字段的读入结束。这意味着scanf函数可以跨越行的界限来读入其输入,因为换行符也是空白符(空白符包括空格、横向制表符、纵向制表符、换行符、回车符和换页符)。 转换字符列表如下:
字段类型字符:
1.3.2 scanf
scanf(...)等价于fscanf(stdin, ...)。 1.3.3 sscanf
与scanf()基本相同,但sscanf()从buf指向的数组中读,而不是stdin。 1.4 字符输入输出函数1.4.1 fgetc
以unsigned char类型返回输入流stream中下一个字符(转换为int类型)。如果到达文件末尾或发生错误,则返回EOF。 1.4.2 fgets
从流stream中读入最多num-1个字符到数组str中。当遇到换行符时,把换行符保留在str中,读入不再进行。数组str以'\0'结尾。 1.4.3 fputc
把字符ch(转换为unsigned char类型)输出到流stream中。 1.4.4 fputs
把字符串str输出到流stream中,不输出终止符'\0'。 1.4.5 getc
getc()与fgetc()等价。不同之处为:当getc函数被定义为宏时,它可能多次计算stream的值。 1.4.6 getchar
等价于getc(stdin)。 1.4.7 gets
从stdin中读入下一个字符串到数组str中,并把读入的换行符替换为字符'\0'。 gets()可读入无限多字节,所以要保证str有足够的空间,防止溢出。 1.4.8 putc
putc()与fputc()等价。不同之处为:当putc函数被定义为宏时,它可能多次计算stream的值。 1.4.9 putchar
等价于putc(ch, stdout)。 1.4.10 puts
把字符串str和一个换行符输出到stdout。 1.4.11 ungetc
把字符ch(转换为unsigned char类型)写回到流stream中,下次对该流进行读操作时,将返回该字符。对每个流只保证能写回一个字符(有些实现支持回退多个字符),且此字符不能是EOF。 1.5 直接输入输出函数1.5.1 fread
从流stream中读入最多count个长度为size个字节的对象,放到buf指向的数组中。 返回值可能小于指定读入数,原因可能是出错,也可能是到达文件尾。实际执行状态可用feof()或ferror()确定。 1.5.2 fwrite
把buf指向的数组中count个长度为size的对象输出到流stream中,并返回被输出的对象数。如果发生错误,则返回一个小于count的值。 1.6 文件定位函数1.6.1 fseek
对流stream相关的文件定位,随后的读写操作将从新位置开始。 对于二进制文件,此位置被定位在由origin开始的offset个字符处。origin的值可能为SEEK_SET(文件开始处)、SEEK_CUR(当前位置)或SEEK_END(文件结束处)。 对于文本流,offset心须为0,或者是由函数ftell()返回的值(此时origin的值必须是SEEK_SET)。 1.6.2 ftell
返回与流stream相关的文件的当前位置。出错时返回-1L。 1.6.3 rewind
rewind(fp)等价于fssek(fp, 0L, SEEK_SET)与clearerr(fp)这两个函数顺序执行的效果,即把与流stream相关的文件的当前位置移到开始处,同时清除与该流相关的文件尾标志和错误标志。 1.6.4 fgetpos
把流stream的当前位置记录在*position中,供随后的fsetpos()调用时使用。 1.6.5 fsetpos
把流stream的位置定位到*position中记录的位置。*position的值是之前调用fgetpos()记录下来的。 1.7 错误处理函数当发生错误或到达文件末尾时,标准库中的许多函数将设置状态指示符。这些状态指示符可被显式地设置和测试。另外,(定义在<errno.h>中的)整数表达式errno可包含一个出错序号,该数将进一步给出最近一次出错的信息。 1.7.1 clearerr
清除与流stream相关的文件结束指示符和错误指示符。 1.7.2 feof
与流stream相关的文件结束指示符被设置时,函数返回一个非0值。 1.7.3 ferror
与流stream相关的文件出错指示符被设置时,函数返回一个非0值。 1.7.4 perror
perror(s)用于输出字符串s以及与全局变量errno中的整数值相对应的出错信息,具体出错信息的内容依赖于实现。该函数的功能类似于:
http://www./docs/c-language-standard-library/ |
|