文件IO与标准IO -缓存

文件IO和标准IO的区别:
     文件IO属于系统调用,仅可在类UNIX系统中使用,可移植性差;
     标准IO是标准IO基于标准C库的进一步封装,可在windows、linux等操作系统下使用,可移植性好,但是存在于用户空间,调用的效率较低。

文件IO:直接调用内核提供的系统调用函数,头文件是unistd.h

文件IO操作:open、close、read、write、lseek等;

 ssize_t write(int fd, const void *buf, size_t count);
 ssize_t read(int fd, void *buf, size_t count);
 int open(const char *pathname, int flags);
 int open(const char *pathname, int flags, mode_t mode);

主flags(互斥关系,必须包含一个):

 次flags:可选

 mode参数:设置不同用户对新文件的读写权限标志。可由八进制数字给出的时候,如 0777 


标准IO:间接调用系统调用函数(代码调用C库函数来间接调用系统函数),头文件是:stdio.h

标准IO操作:fopen fclose (fseek rewind ftell文件读取指针的位置相关指针)

FILE *fopen(const char *pathname, const char *mode);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

标识文件方法:文件流指针

缓存:用户缓存(标准/文件IO)、内核缓存(标准/文件IO)、库缓存(标准IO);

模式:

+:可读可写,

w:新建文件、清空文件、可读

 r:可读

a:清空文件、可写、写开始位置在文件结尾,不可新建

b:打开二进制文件

标准IO和文件IO打开文件标志对比
fopen()        mode open()        flags
 r O_RDONLY
wO_WRONLY | O_CREAT | O_TRUNC
aO_WRONLY | O_CREAT | O_APPEND
r+O_RDWR
w+O_RDWR | O_CREAT | O_TRUNC
a+O_RDWR | O_CREAT | O_APPEND

printf函数将库缓存写入内核缓存的条件:

1、遇到'\n';

2、库缓存写满时。1K


三类读写函数:

  • 行缓存: 遇到新行符(\n)或写满缓存时调用系统函数

                      读:fgets,gets,printf,fprintf,sprintf,stdout

                       写:fputs,puts,scanf

         gets 未指定读的缓存大小、只能从标准输入来读 、'\n'被gets自动忽略

         puts 只能标准输出、输出时自动添加'\n'

         printf 只能写到标准输出

        sprintf 写到一个字符串中

        fprintf 写到普通文件中或者标准输出等

         fclose()用于关闭一个文件。在该文件被关闭之前,刷新缓存中的数据。如果标准I/O库已为该流自动分配了一个缓存,则释放此缓存。

         fflush():刷新缓存函数。把库函数缓存的内容强制写入内核。

  • 无缓存:用户调用函数,就会将内容写到内核

               stderr

  • 全缓存:只有写满缓存时才会调用系统函数

    读:fread

    写:fwrite


当返回错误时,判断是到达文件结尾(feof())还是读写出错(ferror())

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值