在unix中read和pread有什么区别?

6gpjuf90  于 2022-11-04  发布在  Unix
关注(0)|答案(4)|浏览(244)

read()pread()在unix中有什么区别?
在两者之间选择时,我应该考虑哪些要点?
我在谷歌上搜索它们之间的区别,但没有结果。

pbpqsu0x

pbpqsu0x1#

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

当需要以固定偏移量重复读取数据(例如,指向文件中单个记录的数据库索引)时,可以使用它来保存 seek() 调用。
基本上,如果您的数据是连续的,则使用 read(),如果您知道,则使用 pread(),或者可以计算读取的偏移量。

gzszwxb4

gzszwxb42#

From this pread link
pread的原子性使共享文件描述符的进程或线程能够在特定偏移量处从共享文件读取,而无需使用锁定机制,而锁定机制对于在单独的lseek和read系统调用中实现相同的结果是必需的。原子性是必需的,因为文件指针是共享的,并且一个线程可能在另一个进程完成lseek之后但在读取之前使用lseek移动指针。

7vhp5slm

7vhp5slm3#

谷歌给了我man pread
如果您read()两次,您会得到两个不同的结果,这表明read()在文件中前进。
如果两次执行pread(),则会得到相同的结果,即pread()停留在文件中的同一点。

ftf50wuq

ftf50wuq4#

read()从当前文件偏移量开始阅读所请求的字节数,而使用pread(),您可以指定偏移量。这在一组函数使用文件指针顺序读取文件,而另一组函数同时访问特定数据的情况下非常有用。

相关问题