You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中为何lseek(1.txt,0,SEEK_END)等于文件大小+1?空文件返回0?

问题

在Linux系统中,为何调用lseek(1.txt, 0, SEEK_END)的返回值等于文件中的文本数量加1,但当文件为空时,lseek()的返回值为0?

测试代码

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
int main(int argc, char *argv[]){
    int fd;
    fd=open(argv[1], O_RDWR);
    printf("file size : %ld\n",lseek(fd, (off_t)0 ,SEEK_END));
}

解答

  • 本质上lseek(fd, 0, SEEK_END)的返回值就是文件的实际字节总长度,不存在“文本数量加1”的特殊规则。你看到的差异大概率是因为文件里藏了个换行符:比如手动编辑文件时,输入内容后按回车结束,编辑器会自动在末尾追加一个\n(换行符,占1字节),而你统计“文本数量”时只算了可见字符,没把这个隐藏的换行符算进去,所以才觉得返回值多了1。
  • 空文件的字节长度本身就是0,所以lseek返回0是完全正常的,符合空文件的长度定义。
  • 想验证的话,直接用od -c 1.txt命令查看文件的所有字节,就能看到包括换行符在内的所有字符,此时字节总数和lseek的返回值会完全匹配。

内容的提问来源于stack exchange,提问作者SSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:47:06