如何仅使用lseek()
查看偏移光标当前是否处于EOF?
答案 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)
的文件描述符)。