stdio.h
size_t:是由运算符sizeof产生的无符号整类型;
fpos_t:类型定义能够唯一说明文件中的每个位置的对象。
EOF:其值代表文件的结尾。
文件操作
fopen
FILE *fopen(const char *filename, const char *mode);
返回:成功为FILE指针,失败为NULL
打开以filename所指内容为名字的文件,返回与之关联的流。
mode决定打开的方式,以文本模式打开的可选值如下,以二进制模式打开的(rb\wb\ab\rb+\wb+\ab+)类似,不在赘述:
mode |
含义 |
若文件不存在 |
打开后文件指针位置 |
是否清空原有内容 |
读写位置 |
注 |
r |
只读 |
打开失败 |
开头 |
否 |
任意位置读取,不可写入 |
|
w |
只写 |
新建 |
开头 |
是 |
不可读取,任意位置写入 |
写入时会覆盖原有位置内容 |
a |
只写 |
新建 |
结尾 |
否 |
不可读取,只能尾部写入 |
|
r+ |
读写 |
打开失败 |
开头 |
否 |
任意位置读、写 |
写入时会覆盖原有内容 |
w+ |
读写 |
新建 |
开头 |
是 |
任意位置读、写 |
写入时会覆盖原有内容 |
a+ |
读写 |
新建 |
结尾 |
否 |
任意位置读,只能尾部写入 |
|
注:带"+"号的,即可读可写模式下,在写操作和读操作的交替过程中,要注意使用fflush()或文件定位函数fseek()、fsetpos()、rewind()等重新定位文件指针的位置。
freopen
FILE *freopen(const char *filename, const char *mode, FILE *stream);
返回:成功为stream,失败为NULL
以mode指定的方式打开文件filename,并使该文件与流stream相关联。freopen()先尝试关闭与stream关联的文件,不管成功与否,都继续打开新文件。
该函数的主要用途是把系统定义的标准流stdin、stdout、stderr重定向到其他文件。
fread
size_t fread(void *buf, size_t size, size_t count, FILE *stream);
返回:实际读入的对象数
从流stream中读入最多count个长度为size个字节的对象,放到buf指向的数组中。
返回值可能小于指定读入数,原因可能是出错,也可能是到达文件尾。实际执行状态可用feof()或ferror()确定。
fwrite
size_t fwrite(const void *buf, size_t size, size_t count, FILE *stream);
返回:实际输出的对象数
把buf指向的数组中count个长度为size的对象输出到流stream中,并返回被输出的对象数。如果发生错误,则返回一个小于count的值。
fflush
int fflush(FILE *stream);
返回:成功为0,失败返回EOF
对输出流(写打开),fflush()用于将已写到缓冲区但尚未写出的全部数据都写到文件中;对输入流,其结果未定义。如果写过程中发生错误则返回EOF,正常则返回0。
fflush(NULL)用于刷新所有的输出流。
程序正常结束或缓冲区满时,缓冲区自动清仓。
fclose
int flcose(FILE *stream);
返回:成功为0,失败返回EOF
刷新stream的全部未写出数据,丢弃任何未读的缓冲区内的输入数据并释放自动分配的缓冲区,最后关闭流。
remove
int remove(const char *filename);
返回:成功为0,失败为非0值
删除文件filename。
rename
int rename(const char *oldfname, const char *newfname);
返回:成功为0,失败为非0值
把文件的名字从oldfname改为newfname。
tmpfile
FILE *tmpfile(void);
返回:成功为流指针,失败为NULL
以方式"wb+"创建一个临时文件,并返回该流的指针,该文件在被关闭或程序正常结束时被自动删除。
tmpnam
char *tmpnam(char s[L_tmpnam]);
返回:成功为非空指针,失败为NULL
若参数s为NULL(即调用tmpnam(NULL)),函数创建一个不同于现存文件名字的字符串,并返回一个指向一内部静态数组的指针。
若s非空,则函数将所创建的字符串存储在数组s中,并将它作为函数值返回。s中至少要有L_tmpnam个字符的空间。
tmpnam函数在每次被调用时均生成不同的名