unix中read和pread有什么区别?

时间:2009-11-06 12:30:26

标签: c unix

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

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

4 个答案:

答案 0 :(得分:35)

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

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

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

答案 1 :(得分:19)

从此link

  

pread的原子性启用   共享文件的进程或线程   描述符从共享文件中读取   在不使用a的特定偏移处   锁定机制将是   必须达到同样的结果   在单独的lseek和读取系统中   调用。原子性是必需的   文件指针是共享的和一个线程   可能会使用lseek移动指针   在另一个过程完成后   lseek但在阅读之前。

答案 2 :(得分:6)

Google给了我man pread

如果您read()两次,则会得到两个不同的结果,表明read()在文件中前进。

如果您pread()两次,则会得到相同的结果,表明pread()停留在文件的同一位。

答案 3 :(得分:0)

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