打开文件
FILE *fdopen(int fd, const char *mode);
/**
* 将文件描述符转换为文件指针
* @param[in] fd 文件描述符
* @param[in] mode 文件指针的流形态,需和原文件描述符的读写模式相同
* @return FILE* 成功返回文件指针,失败返回NULL
*/

FILE *fopen(char *pname, char *mode);
/**
* 打开指定的文件
* @param[in] pname 文件名
* @param[in] mode 打开模式
	"r"="rt"打开一个文本文件,文件必须存在,只允许读
	"w" = “wt”新建一个文本文件,已存在的文件将内容清空,只允许写
	"a" = "at"打开或新建一个文本文件,只允许在文件末尾追写
	"rb"打开一个二进制文件,文件必须存在,只允许读
	“wb”新建一个二进制文件,已存在的文件将内容清空,只允许写
	“ab”打开或新建一个二进制文件,只允许在文件末尾追写
	
	"r+"="rt+"(读写)打开一个文本文件,文件必须存在,允许读写
	"w+" = "wt+"新建一个文本文件,已存在的文件将内容清空,允许读写
	"a+" = "at+"打开或新建一个文本文件,可以读,但只允许在文件末尾追写
	“rb+”打开一个二进制文件,文件必须存在,允许读写
	“wb+”新建一个二进制文件,已存在的文件将内容清空,允许读写
	“ab+”打开或新建一个二进制文件,可以读,但只允许在文件末尾追写
* @return FILE* 被打开文件的文件指针,失败返回NULL
*/

FILE *freopen(const char *path, const char *mode, FILE *stream);
/**
* 把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件
* @param[in] path 需要重定向到的文件名或文件路径
* @param[in] mode 文件访问模式
* @param[in] stream 需要被重定向的文件流
* @return FILE* 成功返回新的文件指针,失败返回NULL
*/
关闭文件
int fclose(FILE *fp);
/**
* 关闭指定的文件
* @param[in] fp 文件指针
* @return int 正常关闭返回0,异常返回EOF
*/
读取文件
int getc(FILE *stream);
int fgetc(FILE *fp);
/**
* 从fp中读取一个字符,作为返回值返回
* @param[in] fp 文件指针
* @return int 返回读取字符的代码,异常返回EOF
*/
int putc(int c, FILE *stream);
int fputc(int ch, FILE*fp);
/**
* 将一个字符ch写入到文件句柄fp
* @param[in] ch 要写入的字符
* @param[in] fp 文件指针
* @return int 返回写入的字符,异常返回EOF
*/

int getw(FILE *stream);
/**
* 以二进制形式读取一个整数
* @param[in] stream 文件指针
* @return int 所读取整数的值,异常返回EOF,所以必须用feof()或ferror()来判断是到了文件结束,还是出现了一个出错。
*/
int putw(int w, FILE *stream);
/**
* 以二进制形式把由变量n指出的整数值存放到由fp指定的文件中
* @param[in] w 要写入文件的整数
* @param[in] stream 文件指针
* @return int 返回写入的整数值,异常返回EOF,所以必须用feof()或ferror()来判断是到了文件结束,还是出现了一个出错。
*/

char *fgets(char *str, int n, FILE *fp);
/**
* 由fp指出的文件中读取n-1个字符,并把他们存放到有str指出的字符数组中区,最后加上一个由字符串结束符'\0'
* @param[in] str 保存字符串的内存地址
* @param[in] n 要读取的字符个数
* @param[in] fp 文件指针
* @return char* 字符串的内存首地址,异常返回NULL(此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误)
*/
int fputs(const char *str, FILE *fp);
/**
* 把由str之处的字符串写入到fp所指的文件中去
* @param[in] str 字符串的内存地址
* @param[in] fp 文件指针
* @return int 正常返回写入的字符串个数,异常返回EOF
*/

int fscanf(FILE *stream, const char *format, ...);
/**
* 从一个文件流中执行格式化输入,当遇到空格或者换行时结束。注意该函数遇到空格时也结束,这是其与 fgets 的区别,fgets 遇到空格不结束
* @param[in] stream 要操作的文件指针
* @param[in] format 格式化字符串
* @param[in] ... 对应的格式化字符
* @return int 正常返回读取的字符串个数,异常返回EOF(此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误)
*/
int fprintf(FILE *stream, const char *format, ...);
/**
* 把输出表列中的数据按照指定的格式输出到文件中
* @param[in] stream 要操作的文件指针
* @param[in] format 格式化字符串
* @param[in] ... 对应的格式化字符
* @return int 正常返回写入的字符串个数,异常返回一个负数
*/

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/**
* 把输出表列中的数据按照指定的格式输出到文件中
* @param[in] ptr 指向存放数据块的内存空间,该内存可以是数组空间,也可以是动态分配的内存。
* @param[in] size 每个数据块所占的字节数
* @param[in] nmemb 预读取的数据块最大个数
* @param[in] stream 文件指针,指向所读取的文件
* @return size_t 返回实际读取的数据块(非字节)个数,如果该值比count小,则说明已读到文件尾或有错误产生,这时一般采用函数 feof 及 ferror 来辅助判断
*/
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
/**
* 把输出表列中的数据按照指定的格式输出到文件中
* @param[in] ptr 存放要写入的数据块所在的内存空间
* @param[in] size 每个数据块所占的字节数
* @param[in] nmemb 预写入的数据块最大个数
* @param[in] stream 文件指针,指向所读取的文件
* @return size_t 返回实际写入的数据块(非字节)个数,如果该值比count小,则说明buf所指空间中的所有数据块已写完或有错误产生。这时一般采用 feof 及 ferror 来辅助判断
*/

int ungetc(int char, FILE *stream);
/**
* 把字符 char(一个无符号字符)推入到指定的流 stream 中,以便它是下一个被读取到的字符。
* @param[in] char 这是要被推入的字符
* @param[in] stream 文件指针
* @return 如果成功,则返回被推入的字符,否则返回 EOF,且流 stream 保持不变。
*/

int vfprintf(FILE *stream, const char *format, va_list ap);
/**
* 使用参数列表发送格式化输出到流 stream 中
* @param[in] stream 文件指针
* @param[in] format 这是 C 字符串,包含了要被写入到流 stream 中的文本,格式可以是:%[flags][width][.precision][length]specifier
* @param[in] ap 一个表示可变参数列表的对象。这应被 <stdarg> 中定义的 va_start 宏初始化
* @return 如果成功,则返回写入的字符总数,否则返回一个负数。

使用例子
void WriteFrmtd(FILE *stream, char *format, ...)
{
	va_list args;
	
	va_start(args, format);
	vfprintf(stream, format, args);
	va_end(args);
}
*/
删除文件
int remove(const char *filename);
/**
* 删除给定的文件名 filename,以便它不再被访问
* @param[in] stream 文件指针
* @return 如果成功,则返回零。如果错误,则返回 -1,并设置 errno。
*/
移动文件
int rename(const char *old_filename, const char *new_filename);
/**
* 把 old_filename 所指向的文件名改为 new_filename。
* @param[in] old_filename 要被重命名/移动的文件名称。
* @param[in] new_filename 文件的新名称。
* @return 如果成功,则返回零。如果错误,则返回 -1,并设置 errno。
*/
文件状态
void clearerr(FILE *stream);
/**
* 清除指定文件的错误标志
* @param[in] stream 文件指针
* @return void 无返回值
*/

int feof(FILE *stream);
/**
* 检查文件是否结束
* @param[in] stream 文件指针
* @return int true:文件结束 false:未结束
*/

int ferror(FILE *stream);
/**
* 检查文件在操作中是否是否出错
* @param[in] stream 文件指针
* @return int true:文件出错 false:文件正常
*/

int fileno(FILE *stream);
/**
* 获取文件指针使用的文件描述符
* @param[in] stream 文件指针
* @return 所属文件指针的文件描述符
*/

int fflush(FILE *stream);
/**
* 刷新流 stream 的输出缓冲区
* @param[in] stream 文件指针
* @return 如果成功,该函数返回零值。如果发生错误,则返回 EOF,且设置错误标识符(即 feof)
*/
文件位置
void rewind(FILE *stream);
/**
* 将文件指针当前所在的文件流位置移动到文件开始,相当于:fseek(stream, 0L, SEEK_SET)
* @param[in] stream 文件指针
* @return 无返回值
*/

long ftell(FILE *stream);
/**
* 获取当前文件指针的文件流所在位置
* @param[in] stream 文件指针
* @return 成功返回当前文件流所在位置,其他情况返回EOF
*/

int fseek(FILE *stream, long offset, int whence);
/**
* 移动当前文件指针的文件流到指定位置
* @param[in] stream 文件指针
* @param[in] offset 要移动的距离,负数向文件头前部方向移动,负数向尾部方向移动
* @param[in] whence 从哪里开始移动
	SEEK_SET 从开始位置
	SEEK_CUR 从当前位置
	SEEK_END 从文件末尾
* @return 成功返回当前文件流所在位置,其他情况返回EOF
*/

int fgetpos(FILE *stream, fpos_t *pos); //获取流 stream 的当前文件位置,并把它写入到 pos。
int fsetpos(FILE *stream, fpos_t *pos); //设置给定流 stream 的文件位置为给定的位置。参数 pos 是由函数 fgetpos 给定的位置。
临时文件
FILE *tmpfile(void);
/**
* 以二进制读写方式(wb+)创建临时文件。被创建的临时文件会在流关闭的时候或者在程序终止的时候自动删除
* @return 如果成功,该函数返回一个指向被创建的临时文件的流指针。如果文件未被创建,则返回 NULL。
*/

char *tmpnam(char *str);
/**
* 生成并返回一个有效的临时文件名,该文件名之前是不存在的。如果 str 为空,则只会返回临时文件名。
* @param[in] str 保存临时文件名指针地址
* @param[in] buffer 这是分配给用户的缓冲,它的长度至少为 BUFSIZ 字节,BUFSIZ 是一个宏常量,表示数组的长度。
* @return
	一个指向 C 字符串的指针,该字符串存储了临时文件名。
	如果 str 是一个空指针,则该指针指向一个内部缓冲区,缓冲区在下一次调用函数时被覆盖。
	如果 str 不是一个空指针,则返回 str。如果函数未能成功创建可用的文件名,则返回一个空指针。
*/

char *mktemp(char *template);
/**
* 建立唯一的临时文件名,参数template 所指的文件名称字符串中最后六个字符必须是XXXXXX
* @param[in] template 临时文件名
* @return 返回产生的唯一的临时文件名
*/
文件缓冲区
void setbuf(FILE *stream, char *buffer);
/**
* 定义流 stream 应如何缓冲。
* @param[in] stream 文件指针
* @param[in] buffer 这是分配给用户的缓冲,它的长度至少为 BUFSIZ 字节,BUFSIZ 是一个宏常量,表示数组的长度。
* @return 无返回值
*/

int setvbuf(FILE *stream, char *buffer, int mode, size_t size);
/**
* 定义流 stream 应如何缓冲。
* @param[in] stream 文件指针
* @param[in] buffer 分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。
* @param[in] mode 指定文件缓冲的模式:
	_IOFBF	全缓冲:对于输出,数据在缓冲填满时被一次性写入。对于输入,缓冲会在请求输入且缓冲为空时被填充。
	_IOLBF	行缓冲:对于输出,数据在遇到换行符或者在缓冲填满时被写入,具体视情况而定。对于输入,缓冲会在请求输入且缓冲为空时被填充,直到遇到下一个换行符。
	_IONBF	无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。
* @param[in] size 这是缓冲的大小,以字节为单位。
* @return 如果成功,则该函数返回 0,否则返回非零值。
*/