【发布时间】:2009-11-06 12:30:26
【问题描述】:
unix中函数read()和pread()有什么区别?
在它们之间进行选择时,我应该考虑哪些方面?
我用谷歌搜索了它们之间的区别,但没有结果。
【问题讨论】:
unix中函数read()和pread()有什么区别?
在它们之间进行选择时,我应该考虑哪些方面?
我用谷歌搜索了它们之间的区别,但没有结果。
【问题讨论】:
Pread() 的工作原理与 read() 类似,但从文件中的指定位置读取而不修改文件指针。
当您需要重复读取固定偏移量的数据时,您会使用它,例如指向文件中单个记录的数据库索引,以保存 seek() 调用。
如果您的数据是顺序的,则基本上使用 read(),如果您知道,则使用 pread(),或者可以计算要读取的偏移量。
【讨论】:
来自link,
pread 的原子性使 共享文件的进程或线程 从共享文件中读取的描述符 在特定的偏移量而不使用 锁定机制,将是 有必要达到相同的结果 在单独的 lseek 和 read 系统中 来电。原子性是必需的,因为 文件指针是共享的,一个线程 可能使用 lseek 移动指针 在另一个进程完成后 lseek 但在阅读之前。
【讨论】:
Google 给了我man pread。
如果你read()两次,你会得到两个不同的结果,这表明read()在文件中前进。
如果你pread() 两次,你得到相同的结果,这表明pread() 停留在文件中的同一点。
【讨论】:
pread() 要么不更改文件位置,要么不关心文件位置。 (碰巧,两者都是真的。)
read() 开始从当前文件偏移量读取请求的字节数,而使用 pread(),您可以指定偏移量。这在一组函数使用文件指针顺序读取文件而另一组函数同时访问特定数据的情况下很有用。
【讨论】: