【问题标题】:read from file after calling lseek64 - Linux调用 lseek64 后从文件中读取 - Linux
【发布时间】:2023-03-28 20:34:01
【问题描述】:

我正在尝试读取一个大文件 (> 2.0 GB)。 查找是由 lseek64 完成的,然后我尝试使用 read(fileHandle, buffer, bufferLength)\ pread64(fileHandle, buffer, bufferLength, offset) 读取 - 但两者都返回 -1。

会是什么?

提前致谢!

【问题讨论】:

  • 请提供更多上下文。文件有多大?你在哪里寻求?如果您寻求小偏移量,它会起作用吗?
  • 能贴出相关的代码片段吗?否则很难调试...
  • 该文件的大小为 2.39 GB,但其他大小相似的文件也会出现这种情况。 errno 的值为 EIO。
  • 只剪切相关代码是相当困难的(这是库的一部分,功能更多......)但重要的部分:我在运行在虚拟机上的 Redhat 上运行它,并且该文件实际上在主机上(而不是在 RedHat VM 本身上)。谢谢大家!
  • 至少在读取后放置一个 perror() 语句,这样可以更准确地解释它失败的原因。

标签: c linux file


【解决方案1】:

你有

#define _FILE_OFFSET_BITS 64

在包含系统调用标头之前?否则,显示一些代码。

【讨论】:

    【解决方案2】:
    ssize_t count = read(fileHandle, buffer, bufferLength);
    if ( count == -1 )
    {
     fprintf(stderr, "can't read file: %m\n");
     exit(1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2017-04-09
      相关资源
      最近更新 更多