unix中read和pread有什么区别?

Vij*_*jay 31 c unix

函数read()pread()unix有什么区别?
在他们之间做出选择时,我应该考虑哪些方面?

我用谷歌搜索他们之间的差异,但没有结果.

ihu*_*huk 36

Pread()的工作方式与read()类似,但是从文件中的指定位置读取而不修改文件指针.

当您需要以固定偏移量重复读取数据时,可以使用它,例如指向文件中各个记录的数据库索引,以保存在seek()调用上.

如果您的数据是连续的,则基本上使用read(),如果您知道,则使用pread(),或者可以计算读取的偏移量.


小智 19

从这个链接,

pread的原子性使共享文件描述符的进程或线程能够从特定偏移量的共享文件中读取,而不使用在单独的lseek和read系统调用中实现相同结果所必需的锁定机制.由于文件指针是共享的,因此一个线程可能会在另一个进程完成lseek之后但在读取之前使用lseek移动指针,因此需要原子性.


mou*_*iel 8

谷歌给了我man pread.

如果你read()两次,你得到两个不同的结果,这表明read()文件的进展.

如果你pread()两次,你会得到相同的结果,这表明它pread()保持在文件中的同一点.

  • 不完全的.它表明`pread()`要么不改变文件位置,要么不关心文件位置.(碰巧,两者都是真的.) (3认同)