【发布时间】:2017-02-11 06:44:42
【问题描述】:
我用 C++ 编程,发现 pread 的工作非常有趣。
pread() 返回读取的字节数。返回的读取字节数可能与指定的要读取的字节数不同。
为什么pread不保证它读取所有指定的字节?
这个限制从何而来?
【问题讨论】:
我用 C++ 编程,发现 pread 的工作非常有趣。
pread() 返回读取的字节数。返回的读取字节数可能与指定的要读取的字节数不同。
为什么pread不保证它读取所有指定的字节?
这个限制从何而来?
【问题讨论】:
为什么pread不保证它读取所有指定的字节?
因为它是这样设计的。
正如上面提到的here:
请注意,成功调用 transfer less 不是错误 比请求的字节数(参见 read(2) 和 write(2))。
因此,在这种情况下,您只需再次调用该函数即可。
【讨论】:
这可能会发生,例如因为实际可用的字节数较少 现在(可能是因为我们接近文件结尾,或者因为我们 正在从管道或终端读取),或者因为 read() 是 被一个信号打断。出错时,返回 -1,并设置 errno 适当地。在这种情况下,未指定文件是否 位置(如果有)发生变化。
【讨论】: