如何通过仅使用lseek()来确定偏移光标当前是否处于EOF状态?
发布于 2015-01-18 18:38:23
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)的文件描述符)。
https://stackoverflow.com/questions/28013009
复制相似问题