【问题标题】:Why pread does not guarantee that it reads all the specified bytes?为什么 pread 不保证它读取所有指定的字节?
【发布时间】:2017-02-11 06:44:42
【问题描述】:

我用 C++ 编程,发现 pread 的工作非常有趣。

pread() 返回读取的字节数。返回的读取字节数可能与指定的要读取的字节数不同。

为什么pread不保证它读取所有指定的字节?

这个限制从何而来?

【问题讨论】:

    标签: c++ linux file


    【解决方案1】:

    为什么pread不保证它读取所有指定的字节?

    因为它是这样设计的。

    正如上面提到的here

    请注意,成功调用 transfer less 不是错误 比请求的字节数(参见 read(2) 和 write(2))。

    因此,在这种情况下,您只需再次调用该函数即可。

    【讨论】:

    • 所以你知道为什么吗?这种行为的根本原因是什么?
    • @syko 这是设计使然。这支持将数据作为可用块交付的 I/O 接口。
    【解决方案2】:

    这可能会发生,例如因为实际可用的字节数较少 现在(可能是因为我们接近文件结尾,或者因为我们 正在从管道或终端读取),或者因为 read() 是 被一个信号打断。出错时,返回 -1,并设置 errno 适当地。在这种情况下,未指定文件是否 位置(如果有)发生变化。

    来自https://linux.die.net/man/2/read

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多