1.打开文件fopen()
#include <stdio.h>
/*
path:参数path指向文件路径,可以是绝对路径、也可以是相对路径。
mode:参数mode指定了对该文件的读写权限,是一个字符串
*/
FILE *fopen(const char *path, const char *mode);
2.关闭文件fclose()
#include <stdio.h>
/*
参数stream为FILE类型指针,调用成功返回0;失败将返回EOF(也就是-1),并且会设置errno来指示错误原因
*/
int fclose(FILE *stream);
3.读文件和写文件
#include <stdio.h>
/*
ptr:fread()将读取到的数据存放在参数ptr指向的缓冲区中;
size:fread()从文件读取nmemb个数据项,每一个数据项的大小为size个字节;
nmemb:参数nmemb指定了读取数据项的个数;
stream:FILE指针;
返回值:调用成功时返回读取到的数据项的数目(数据项数目并不等于实际读取的字节数,除非参数size等于1);
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/*
ptr:将参数ptr指向的缓冲区中的数据写入到文件中;
size:参数size指定了每个数据项的字节大小;
nmemb:参数nmemb指定了写入的数据项个数;
stream:FILE指针;
返回值:调用成功时返回写入的数据项的数目(数据项数目并不等于实际写入的字节数,除非参数size等于1);
*/
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
譬如要将一个struct mystr结构体数据写入到文件中,可按如下方式写入:
fwrite(buf, sizeof(struct mystr), 1, file);
4.fseek定位
#include <stdio.h>
/*
stream:FILE指针;
offset:偏移量,以字节为单位;
whence:用于定义参数offset偏移量对应的参考值, SEEK_SET SEEK_CUR SEEK_END
*/
int fseek(FILE *stream, long offset, int whence);
/*
参数stream指向对应的文件,函数调用成功将返回当前读写位置偏移量;调用失败将返回-1,并会设置errno以指示错误原因
*/
long ftell(FILE *stream);
5.检查或复位状态
#include <stdio.h>
/*
用于测试参数stream所指文件的end-of-file标志,当文件的读写位置移动到了文件末尾时,end-of-file标志将会被设置
*/
int feof(FILE *stream);
/*
用于测试参数stream所指文件的错误标志,当对文件的I/O操作发生错误时,错误标志将会被设置
*/
int ferror(FILE *stream);
/*
用于清除end-of-file标志和错误标志
*/
void clearerr(FILE *stream);
6.格式化输出
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int dprintf(int fd, const char *format, ...);
int sprintf(char *buf, const char *format, ...);
int snprintf(char *buf, size_t size, const char *format, ...);
7.格式化输入
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
8.刷新文件I/O的内核缓冲区
#include <unistd.h>
/*
fsync()将参数fd所指文件的内容数据和元数据写入磁盘,只有在对磁盘设备的写入操作完成之后,才会返回;
参数fd表示文件描述符,函数调用成功将返回0,失败返回-1并设置errno以指示错误原因
*/
int fsync(int fd);
/*
fdatasync()仅将参数fd所指文件的内容数据写入磁盘,并不包括文件的元数据;
*/
int fdatasync(int fd);
/*
sync()会将所有文件I/O内核缓冲区中的文件内容数据和元数据全部更新到磁盘设备中
*/
void sync(void);