【问题标题】:Why do we need lseek when pread accepts offset value?当 pread 接受偏移值时,为什么我们需要 lseek?
【发布时间】:2017-06-07 12:56:14
【问题描述】:

我很难理解为什么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,我错过了什么来帮助我阅读文件?

【问题讨论】:

  • lseek 和 pread 都不是标准 C++ 的一部分。或者标准 C,就此而言。
  • 我的错,你会给它起什么名字? C? Linux?
  • 它看起来更像 C 代码而不是 C++。我添加了一个 POSIX 标签。
  • @NeilButterworth 为什么这很重要?
  • @Galik 这个问题毫无意义。我们有这些标签来回答有关 posix 和 linux 的问题。我已经将其标记为 posix。

标签: c++ posix lseek


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2021-11-05
    • 2015-07-11
    相关资源
    最近更新 更多