【问题标题】:lseek giving ESPIPE errorlseek 给出 ESPIPE 错误
【发布时间】:2014-11-17 17:51:42
【问题描述】:

我打开了一个普通文件,它充当记录数据库。我打开它是:

fd = open ("file", O_CREAT | O_APPEND | O_RDWR, 0644);

然后在我的find_record 函数中,我将偏移量移到开头。

ret_val = lseek(fd, 0, SEEK_SET);

它抛出一个ESPIPE 错误。现在我不知道发生了什么。 我的文件描述符是否被视为管道?如果是,为什么?

lseek 真的有效吗?应该是因为ret_val 不是-1。

【问题讨论】:

  • 你检查open()成功了吗?
  • 是的,没有问题。我在“文件”中写入和读取记录

标签: c file lseek


【解决方案1】:

不能保证errno在成功调用时会被重置。

如果返回值指示错误,您应该只检查errno 的值。

【讨论】:

  • 哦。 errno 的默认值不应该是 0
  • ESPIPE 实际上是errno 29
  • 规范说它将由任何导致错误的调用设置(对于所有使用 errno 的调用)。除此之外,它可以有任何价值。
  • 我见过代码,其中 errno 在系统调用之前显式设置为零,然后在之后检查。对于大多数系统调用,都有一些标记值指示错误......但有些显然除了 errno 之外别无他法。
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2012-09-25
  • 2013-03-21
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多