缓冲输入输出

    所谓缓冲输入输出,即是进行文件I/O时,以块的倍数或者约数大小为单位进行输入输出,保证每次I/O都是块对齐的,从而提高程序的执行效率,为了是每次的输入输出数据大小都是块的大小的倍数或者约数,就必须对数据进行缓冲来实现,所以叫作缓冲I/O。
    c标准库的文件输入输出函数都是基于缓冲的,程序中合理利用标准库进行输入输出不仅可以避免不必要的错误,还可以提高效率。
    常见的c标准库文件输入输出函数有:
        一下函数都在头文件<stdio.h>中声明,所以使用时必须包含该头文件。
        1 打开文件
        函数原型: FILE * fopen(const char * file, const char * mode);
        参数说明:
                file是要打开的文件,比如:“eric/test”;
                mode是打开文件的方式,有一下六种取值
                    “r” : 以读的方式打开文件,流定位在文件的开头,指定的文件如果不存在,则出现错误;
                    "r+":  以读写的方式打开文件,流定位在文件的开头,指定的文件如果不存在,则出现错误;
                    "w":  以写的方式打开文件,流定位在文件的开头,指定的文件如果不存在,则创建该文件,如果文件存在,写之前会先被清空;
                    "w+":以读写的方式打开文件,流定位在文件的开头,指定的文件如果不存在,则创建该文件,如果文件存在,写之前会先被清空;
                    "a":  以追加写模式打开文件,流定位在文件的结尾,指定的文件如果不存在,则创建该文件;
                    "a+":以追加读写模式打开文件,流定位在文件的结尾,指定的文件如果不存在,则创建该文件;
        返回值:
                成功执行返回打开的文件对应的文件指针,错误时返回NULL。
        2  关闭文件
        函数原型:int  fclose(FILE * stream);
        参数说明:stream是要关闭的文件指针
        返回值:
                成功执行返回0,错误时返回EOF。
        3  读文件
        (1)单字节读取
        函数原型:int  fgetc(FILE * stream);
        参数说明:stream是已经以可读方式打开的文件的文件指针
        返回值:
                成功执行返回读出的字符对应的int 值,遇到文件结束或者错误时都返回EOF。
        (2)读取串
        函数原型: char * fgets(char * buf, int size,FILE * stream);
        参数说明:stream是已经以可读方式打开的文件的文件指针,读出size-1个字节,存放在buf中,后面加'/0'.
        返回值:
                成功执行返回buf,错误时返回NULL。
        (3)读二进制文件
        函数原型: size_t fread(void * buf,size_t size,size_t nr,  FILE * stream);
        参数说明:stream是已经以可读方式打开的文件的文件指针,读出nr个大小为size的数据,存放在buf中.
        返回值:
            一般返回nr ,遇到文件结束或者发生错误会返回比nr小的值。
        4   写文件
        (1)单字节写
        函数原型:int  fputc(int c,FILE * stream);
        参数说明:stream是已经以可写方式打开的文件的文件指针,c 是要写的字符
        返回值:
                成功执行返回写出的字符对应的int 值,错误时都返回EOF。
        (2)写字符串
        函数原型:int  fputs(const char * str,FILE * stream);
        参数说明:stream是已经以可写方式打开的文件的文件指针,str是要写的字符串
        返回值:
                成功执行返回非负整数,错误时都返回EOF。
        (3)写二进制文件
        函数原型:size_t  fwrite(void * buf,size_t size,size_t nr,  FILE * stream);
        参数说明:stream是已经以可写方式打开的文件的文件指针,从buf中拿nr个大小为size 的数据写入流。
        返回值:
                成功执行返回nr,错误时都返回小于nr的值。
        5  流定位
        (1)
        函数原型:int  fseek(FILE * stream,long offset,int mode);
        参数说明:stream是已经打开的文件的文件指针.
                        mode可有如下取值:
                        SEEK_SET: 此时流被定位到offset指定的值
                        SEEK_CUR:此时流被定位到当前值加上offset处
                        SEEK_END: 此时流被定位到文件末尾加上offset处
        返回值:
                成功执行返回0,错误时都返回-1。                                                                    
        (2)       
        函数原型:void rewind(FILE * stream);
        参数说明:stream是已经打开的文件的文件指针.
                        注意该函数的错误处理
        返回值:
                无返回值
        6  获得流当前位置
        函数原型:long ftell(FILE * stream);
        参数说明:stream是已经打开的文件的文件指针.
        返回值:
                成功执行返回流当前位置,错误时都返回-1。   
        7 清洗流
        函数原型:int fflush(FILE *stream);
        参数说明:stream是已经打开的文件的文件指针.
                        该函数将用户缓冲区数据清洗到内核空间,如果stream为NULL,则进程打开的所有流都会被清洗。
        返回值:
                成功执行返回0,错误时都返回EOF。   
        8 文件错误和文件结束
            int ferr(FILE *stream);
            int feof(FILE *stream);
            void fclearerr(FILE * stream);
        9 文件加锁与解锁,实现更大范围的原子操作
            void flockfile(FILE * stream);
            void funlockfile(FILE * stream);
           
                               
     以上函数都会在遇到错误是设置errno的值,可以借助它进行错误判断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值