APUE学习: 第五章, 标准I/O库

一, fread, fwrite 与read, write的区别: 缓冲

  • fread/fwrite是对 read, write的一层封装, 即加了一个缓冲区, 其目的在于尽量减少read/write的调用次数
  • 缓冲区分类:
    • 全缓冲: 就是缓冲区满才flush
    • 行缓冲: 一行一次flush
    • 无缓冲
  • 特点:
    • 会有一个例程自动地进行周期性的flush
    • 一般来说标准输出, 标准输入是行缓冲的, 标准错误无缓冲, 普通磁盘文件是全缓冲
    • 缓冲会造成一次额外的内存拷贝, 即由  内核–>用户  变成了  内核–>缓冲区–>用户, 但同时缓冲可以将多次琐碎的读写操作适当减少, 所以结论是: 如果能控制好每次read/write的大小(一般最合适的是pagesize), 直接用read/write效率最高

二, 其他函数

  • freopen 重新打开一个FILE*
  • fdopen: 根据fd创建一个FILE*
  • flush: 刷新缓冲区
  • fileno: 取一个FILE*的fd'
  • fclose: 关闭FILE
  • getc, fgetc, get_char:  每次读字符
  • fgets, gets, 每次读一行字符
  • ugetc:  将一个字符重新塞回FILE流中
  • ferror, feof:  fget等函数的返回值不区分读到eof还是error, 因此需要用这两个函数来区分
  • ftell 返回当前offset
  • fseek 移动offset
  • rewind   将文件offset移到初始
  • dprintf:  pringtf的文件描述符版本
  • tmpname:  生成一个合法的临时文件名, 一般为 /tmp/XXX
  • fmemopen: 打开一段内存流, 即将内存封装成FILE*, 在需要分行读入时比较方便

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值