当pread接受偏移值时,为什么我们需要lseek?

时间:2017-06-03 14:32:06

标签: 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我可以做些什么来帮助我阅读文件,我错过了什么?

1 个答案:

答案 0 :(得分:1)

一个函数可能必须在一个不为它知道的位置(比如当前位置)从/向给定文件句柄读/写,所以你需要解除阅读(或写入)的搜索,因为调用者可能有需要设置位置。

更一般地说,许多I / O只是顺序的,因此没有必要进行搜索,而pread强制寻求。