文件I/O(不带缓存)++标准I/O(带缓存)

概念

      不带缓冲I/O:指每个read和write都调用内核中的一个系统调用。也指在用户区没有缓存,在内核还是有缓存。在进行写操作时,将数据先复制到内核的缓冲区,然后排入对鞋。最后再写到磁盘。比如:要写20个字节,将要调用20次的write。

      产生的问题:一次写多,多次调用系统调用,效率低下。

      带缓冲I/O:指在系统调用上多加了一个缓冲区,来减少系统调用。

                        建立一个缓存区,通常用malloc来分配缓存,还创建一个包含文件和缓存区相关联的数据结构(FILE*),这些系统都为你做了,不需要你考虑。比如:要写20个字节,先把数据写到用户缓冲区,然后根据什么缓冲类型,在把数据写到内核缓冲区中。(读写模式有两个缓冲区)

1、文件I/0需用的函数:open、read、write、lseek、close。

     操作的对象是文件描述符。

     int open(const char* path,int oflag);

     int open(const char* path,int oflag,mode_t mode);   //返回文件描述符,失败-1.

     ssize_t  read(int fd,void* buf,size_t nbytes); 

                             //返回读到的字节数,若到文件结尾,则为0,失败-1.

     ssize_t write(int fd,void* buf,size_t nbytes); //返回以写的字节数,失败-1.

     显示的为文件设置偏移量,off_t lseek(int fd,off_t offset,int whence); 

                     //返回新的文件偏移量,失败-1.

2、标准I/0需用的函数:fopen、fread、fwrite、fgetc、fgets........

     操作的对象时数据流。

标准I/O提供缓冲的目的是为了减少read、write的调用次数

缓冲的类型:

 1.全缓冲:当标准I/O缓冲区填满后才进行实际的I/O操作。

 2.行缓冲:当在输入和输出时遇到换行符,就进行I/O操作。

 3.不带缓冲:相当于read、write。stderr通常是不带缓存,就使得错误信息尽快显示。

  

     

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值