【问题标题】:C: Opening a file at different locations using different file descriptors in multiple threadsC:在多个线程中使用不同的文件描述符在不同的位置打开一个文件
【发布时间】:2014-12-01 19:15:10
【问题描述】:

比如说,我有一个包含 10 段的文件。我有 10 个线程可以独立读取这些段落并将数据提供给主线程。

如何打开这个文件,以便我的处理程序准确地位于它应该读取的位置。说,我知道每段有多少字节。

我知道我可以遍历字节并到达我想要的部分,但我想要一个更快的方法。有吗?

【问题讨论】:

  • 如果每个线程都有自己的文件描述符,可以正常使用lseek()。如果您尝试共享一个文件描述符,则需要处理一个线程的 lseek() 和另一个线程的 read() 之间的竞争。
  • 更好 - 如果您的操作系统有它,请使用结合 lseek() 和 read/v/() 的 pread() 或 preadv(),而不更改文件指针。
  • 知道了,谢谢两位!
  • 正如@Arlie Stephens 所说,使用lseek() 并且可能所有线程都以"r" 读取模式打开文件,而不是通过写入文件来使事情复杂化。

标签: c multithreading file-handling


【解决方案1】:

如果每个线程都有自己的文件描述符,您可以按正常方式使用 lseek()。如果您尝试共享一个文件描述符,则需要处理一个线程的 lseek() 和另一个线程的 read() 之间的竞争。 ——阿莉斯蒂芬斯

更好 - 如果您的操作系统有它,请使用结合 lseek() 和 read/v/() 的 pread() 或 preadv(),而不更改文件指针。 ——阿莉斯蒂芬斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2021-08-08
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多