如何使用 lseek() 确定偏移光标是否在 EOF?
How to find out if offset cursor is at EOF with lseek()?
如何仅使用 lseek()
来确定偏移光标当前是否位于 EOF?
lseek
return 是(新)职位。如果测试后文件位置在末尾是可以接受的,则以下工作:
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)
。
(为了简短起见,我省略了错误检查(return (off_t)-1
的值),请记住将它们包含在实际代码中。)
虽然使用另一个函数,但另一种方法是像上面那样查询当前位置和 fstat
文件以查看 st_size
字段是否等于当前位置。
请注意,在尝试读取超过文件末尾后,为流(FILE *
,而不是 int
文件描述符)设置了文件结束条件,光标在最后是不够的(也就是说,这种方法不是等同于 feof(stream)
的文件描述符)。
如何仅使用 lseek()
来确定偏移光标当前是否位于 EOF?
lseek
return 是(新)职位。如果测试后文件位置在末尾是可以接受的,则以下工作:
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)
。
(为了简短起见,我省略了错误检查(return (off_t)-1
的值),请记住将它们包含在实际代码中。)
虽然使用另一个函数,但另一种方法是像上面那样查询当前位置和 fstat
文件以查看 st_size
字段是否等于当前位置。
请注意,在尝试读取超过文件末尾后,为流(FILE *
,而不是 int
文件描述符)设置了文件结束条件,光标在最后是不够的(也就是说,这种方法不是等同于 feof(stream)
的文件描述符)。