文件IO标准函数

        在标准IO中使用文件时,会对每个文件在内存中申请两段内存空间,用于缓存要进行读、写的数据,实现多次读写文件内容,只需要内核操作一次文件就可以,提高效率标准IO提供三种缓冲:

全缓存:当缓冲区被填满或出现特定的条件,才会刷新缓冲区

行缓存:当输入输出遇到新行符('\n'),就会刷新缓冲区

无缓存:不进行缓存,直接刷新

我们还可以通过 setbuf、setvbuf可以设置打开文件的缓冲类型以及缓冲大小

//函数
#include <stdio.h>

void setbuf(FILE *stream, char *buf);//定义流指针如何缓冲
int setvbuf(FILE *stream, char *buf, int mode, size_t size);//定义流指针如何缓冲,指定大小和缓冲模式

文件IO操作步骤:

        1、打开文件

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//打开文件函数
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

const char *pathname  //字符指针,指向字符串首地址,表示要打开文件的文件名
int flags  //整型,表示打开文件的权限。
//权限如下:
O_RDONLY //只读打开
O_WRONLY //只写打开
O_RDWR //读写打开
//还可以包含0个或多个:
O_TRUNC //如果文件存在,则在打开文件时把文件清空
O_APPEND //以追加的方式打开,所有写操作都在文件的末尾执行
O_NOCTTY //如果是终端,就是操作终端文件
O_CREAT //如果文件不存在,则创建文件,文件存在就没有任何作用
//只有打开选项中有O_CREAT,才表示可能创建文件,则需要第三个参数,创建文件的权限
O_EXCL //如果文件不存在,就创建文件,如果文件存在就报错(和O_CREAT)

mode_t mode //创建文件的权限
//文件实际权限:(mode & ~umask)
//umask:文件权限掩码,为了防止普通用户设置的文件权限过高
//返回值:
//成功:返回打开的文件的文件描述符(打开的文件)
//失败:返回-1,且设置错误码

        2、读写文件

//头文件
#include <unistd.h>
//从文件中读取指定大小字节的数据,输入到程序
ssize_t read(int fd, void *buf, size_t count);
int fd //整型,文件描述符,表示从哪个打开的文件中读取数据
void *buf //指针,地址,读取的数据存储到程序的哪个内存地址(必须要有空间)
size_t count //整型,从文件中读取多少个字节
//返回值:
//成功:返回读取成功的字节数
//0:读取到文件末尾,没有数据可读
//失败:返回 -1, 且设置错误码

//写文件
#include <unistd.h>
//把程序内存空间地址的数据写入到文件,从程序输出数据
ssize_t write(int fd, const void *buf, size_t count);
int fd  //文件描述符,写入到哪个文件中
const void *buf //指针,内存地址,要写入文件的内容的地址,把哪个地址的内容写入文件
size_t count //写入多少个字节
//返回值:
//成功:返回写入的字节数
//失败:返回-1,且设置错误码

        3、关闭文件

//头文件
#include <unistd.h>
//关闭打开的文件
int close(int fd);
int fd //文件描述符,关闭打开的文件
//返回值:
//成功:返回0
//失败:返回-1

在打开文件的时候要注意相应的权限,通过需求去选择权限。创建文件权限使用(mode & ~umask)的时候要注意,umask的值为0002,第一个0代表8进制。如果在使用这些函数的时候,我们要注意使用函数返回值来判断是否成功,如果不成功可以使用perror函数打印错误原因。这样就不会花大量时间去寻找错误点,一目了然。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值