pwrite和pread相比fwrite和fread有什么优势?

Inv*_*tus 18 c++ posix

嘿,请不要介意我是否在问一些微不足道的问题,但是,请有人帮我这个..

Jan*_*dec 32

有两个部分:

  1. pread/ pwriteread/ 之间的区别write:

    它们都处于同一级别,即系统调用.有两点不同:

    1. "p"变体采用偏移量来读取,因此它们独立于当前文件指针.这使得同时从多个线程读取/写入更容易.
    2. "p"变体仅适用于可搜索文件(即真实文件,而不是管道,套接字或设备).
  2. read/ pread/ write/ pwritefread/ 之间的区别fwrite:

    "f"变体是前者的标准运行时包装器(使用基本变体).它们支持进程内缓冲.这可以显着提高简单代码的性能,但它使用系统调用级别的其他功能是不切实际的.

如果您可以很好地使用随机偏移量读取(避免搜索并允许通过一个文件句柄进行并发访问),则只使用"p"变体,这通常是某种数据库文件的情况(以已知偏移的记录为记录)很少在其他应用程序中.


Gre*_*ape 16

当你随机阅读/写作时它很有用.甚至有一个sqlite的替换选项seek()+ read()seek()+ write()pread()/pwrite().为什么它有用?seek()+ read()seek()+ write()都是一对sys调用,pread()而且pwrite()是单个sys调用.减少系统调用 - 提高效率.


小智 5

调用pread/ 后,当前文件位置不会改变pwrite

另外,因为涉及多个线程,您无需调用lseek即可更改当前文件位置pread/ pwrite避免潜在的竞争状况。