如何用lseek()找出偏移光标是否在EOF?

时间:2015-01-18 18:04:14

标签: c eof libc lseek

如何仅使用lseek()查看偏移光标当前是否处于EOF?

1 个答案:

答案 0 :(得分:3)

lseek返回(新)位置。如果在测试后文件位置在最后是可接受的,则以下工作:

off_t old_position = lseek(fd, 0, SEEK_CUR);
off_t end_position = lseek(fd, 0, SEEK_END);
if(old_position == end_position) {
    /* cursor already has been at the end */
}

现在,光标在最后,无论它是否已存在;要将其设置回来,您可以在之后执行lseek(fd, old_position, SEEK_SET)

(为了简洁,我省略了错误检查((off_t)-1的返回值),请记住将它们包含在实际代码中。)

另一种选择,即使用其他功能,将查询上面的当前位置和fstat文件,以查看st_size字段是否等于当前位置。

作为注释,在尝试读取文件末尾之后,为文件结束条件(FILE *而不是int文件描述符)设置,光标为最后是不够的(也就是说,这种方法不是等同于feof(stream)的文件描述符)。