c++ - 为什么 pread 接受偏移值时需要 lseek?

标签 c++ posix lseek

我无法理解为什么 lseek 函数很有用。 假设我从用户那里得到了这样的参数:

off_t offset = 10;

我想从偏移量中读取 100 个字节。 我可以像这样使用 pread:

void * buf = malloc(100);
if (buf == NULL) { exit(1);}
int res = pread(file_id, buf, 100, offset);

另一方面,我知道我可以像这样用 lseek 设置文件:

off_t seek = lseek(file_id, offset, SEEK_SET);

所以我相信我已经使用 pread 实现了阅读。关于 lseek 可以帮助我读取文件,我错过了什么?

最佳答案

一个函数可能必须在它不知道的位置(比如当前位置)从给定的文件句柄读取/写入/写入,因此您需要将查找与读取(或写入)分开,因为调用者可能有需要设置位置。

更一般地说,许多 I/O 只是顺序的,因此不需要查找,而 pread 强制查找。

关于c++ - 为什么 pread 接受偏移值时需要 lseek?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344995/

相关文章:

c - 读写共享内存

linux - 什么是路径//,它与/有何不同

linux - 为什么在双引号内指定部分路径时 posh 无法执行路径名扩展?

c++ - 检查参数包是否包含类型

c++ - 在不复制的情况下为字符串使用外部缓冲区

c - lseek 给出 ESPIPE 错误

c - lseek() 的返回值

c - 如何使用 lseek 创建有漏洞的文件?

c++ - 模板和 std::pair 列表初始化

c++ - VSCode c++ 为 vc 工具链配置