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

来源:互联网 发布:淘宝隐形降权一周恢复 编辑:程序博客网 时间:2024/06/05 01:05

一, 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
原创粉丝点击