c - 如何用 lseek() 判断偏移光标是否在 EOF 处?

标签 c eof libc lseek

如何仅使用 lseek() 来确定偏移光标当前是否位于 EOF?

最佳答案

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) 的文件描述符)。

关于c - 如何用 lseek() 判断偏移光标是否在 EOF 处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013009/

相关文章:

c - 从小写到大写 : fatal errror

c - 结构实现

c++ - eof() 函数不工作 C++ 陷入无限循环

java - 如何使 CTRL+Z 不弄乱 Java 控制台程序

android - wcstombs() 在 Android 上有无效的输出

c - 尝试访问 C 中字符串上的字符时出现总线错误

c - 我需要添加什么才能将输出显示给用户?

c - [C]使用结构体和文件添加、编辑、删除数据

python - 如何找出文件是否位于 `eof` ?

c - 带有负秒的奇怪 mktime 逻辑