如何通过lseek()
仅使用来确定偏移光标当前是否位于 EOF?
问问题
7290 次
1 回答
5
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)
)的文件描述符。
于 2015-01-18T18:38:23.260 回答