为什么lseek(fd1,0,SEEK_END)等于文件大小+ 1?

时间:2018-04-14 14:56:06

标签: c linux fseek

我使用的系统是 Linux

代码:

#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>

void main()
{
    int rbytes,wbytes,fd1,local;
    char buf[10],ch;
    fd1=open("f3.txt",O_RDONLY,0);
    local=lseek(fd1,0,SEEK_CUR);
    printf("The start file pointer position:%d\n",local);
    local=lseek(fd1,0,SEEK_END);
    printf("End pointer position:%d\n",local);
    local=lseek(fd1,-10,SEEK_END);
    printf("-10 File pointer location:%d\n",local);
    rbytes=read(fd1,buf,5);
    buf[5]='\0';
    printf("buf=%s\n",buf);
    close(fd1);
}

结果:

The Swift Programming Language

“f3.txt”的文件内容为“123456789”。

众所周知:

如果内容是123456789

相应的索引是012345678

lseek(fd1,0,SEEK_END)的值应该等于'9'而不是'10'(基于对SEEK_END的解释:文件末尾的偏移量),这让我很困惑很多。 为什么?

文件内容的图片:

enter image description here

命令'wc'的结果:

The image of file content

1 个答案:

答案 0 :(得分:2)

如果您使用f3.txt创建vi并默认推出123456789,则会在行末添加一个新行\n,这就是为什么local=lseek(fd1,0,SEEK_END);会返回{{} 1}}这意味着10加一。

您可以在命令行运行newline并验证。