C标准库和系统调用中的文件IO操作接口

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值