C标准库中的文件IO操作接口
fopen 打开文件
fclose 关闭文件
fread 读取
fwrite 写入
fprintf 格式化写入
fseek 移动跳转当前读取/写入位置
printf 格式化字符串,输出到终端
sprintf 格式化字符串,将格式化后的字符串写入到一个buffer中
fprintf 格式化字符串,将格式化后的字符串写入文件中
相关接口
打开
FILE *fopen(const char *path, const char *mode);
path: 文件路径名
//mode:
// r 只读 r+ 可读可写
// w 只写,文件不存在则创建,若文件存在则清空原有内容
// w+ 相较于w,多出了可读操作
// a 追加写打开,若文件不存在则创建,每次总是写到文件末尾
// a+ 相较于a,多出了可读操作
//返回值:文件的操作句柄----文件流指针
FILE *fp = fopen("./tmp.txt", "w+");
if (fp == NULL) {
perror("fopen error");
return -1;
}
写入
size_t fwrite(void *ptr, size_t size, size_t nmemb,FILE *stream);
//ptr: 要写入的数据
//size: 要写入的块大小 ---fwrite对数据进行按块操作
//nmemb: 要写入的块个数
//stream: fopen返回的文件流指针
//返回值:实际写入的块个数
char *ptr = "hello world!!\n";
size_t ret = fwrite(ptr, strlen(ptr), 1, fp);
if (ret == 0) {
perror("fwrite error");
return -1;
}
跳转
int fseek(FILE *stream, long offset, int whence);
//对stream文件的读写位置跳转到whence位置偏移offset个字节处
//whence:跳转的起始位置
// SEEK_SET 文件起始位置
// SEEK_CUR 当前读写位置
// SEEK_END 文件末尾位置
//offset: 偏移量
fseek(fp, 0, SEEK_SET); //表示读写位置跳转到起始位置
读取
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//ptr: 用于接收数据的缓冲区
//size:要读取的块大小
//nmemb:要读取的块个数
//stream:文件流指针
//返回值:实际读取到的块个数 文件末尾:0
char buf[1024] = {0};
ret = fread(buf, 1023, 1, fp); //从缓冲区读大小为1023的一块数据
perror("fread error");
printf("ret:%d-[%s]\n", ret, &buf[10]);
关闭
fclose(fp);
系统调用IO接口
头文件#include<fcntl>
打开文件
int open(const char *pathname,int flags,mode_t mode);
//pathname: 指定要打开的文件
//flags: 选项参数
必选参数:O_RDONLY O_WRONLY O_RDWR 三者选其一
可选参数:O_CREAT 若文件存在则打开,不存在则创建
O_TRUNC 打开文件同时截断文件为0长度
O_APPEND 写数据时总是写到文件末尾
//mode:文件权限
//返回值:成功返回文件描述符(正整数),失败返回-1
//mode_t umask(mode_t mask);
/将当前进程的文件创建权限掩码修改成为mask,便于直接指定权限
umask(0);
//flags的选项参数可以用|来一起使用
int fd = open("./test.txt", O_RDWR| O_CREAT |O_APPEND | O_TRUNC, 0664);
写入
ssize_t write(int fd, const void *buf, size_t count);
// fd: open打开文件所返回的文件描述符
// buf: 要写入的数据
// count: 要写入的字节数
// 返回值:实际写入的字节数 失败:-1
char *data= "hello world!!!\n";
ssize_t ret = write(fd, data, strlen(data));
跳转
跳转fd文件的读写位置到指定处
off_t lseek(int fd, off_t offset, int whence);
//whence:跳转的起始位置
// SEEK_SET 文件起始位置
// SEEK_CUR 当前读写位置
// SEEK_END 文件末尾位置
//offset: 偏移量
lseek(fd, 0, SEEK_SET); //读写位置跳转到起始位置
读取
ssize_t read(int fd, void *buf, size_t count);
//从fd文件中读取count长度的数据,放到buf中
//返回值:成功返回实际读取到的字节数 失败:-1
char buf[1024] = {0};
ret = read(fd, buf, 1023);
关闭
int close(int fd);
close(fd);