gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:47:00 26 4
gpt4 key购买 nike

我使用的系统是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);
}

结果:

enter image description here

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

众所周知:

如果内容是123456789

对应索引为012345678

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

文件内容图片:

The image of file content

命令“wc”的结果:

And the result of command 'wc'

最佳答案

如果您使用 f3.txt 创建了 vi 并默认在行尾添加了一个新行 char 123456789 ,这就是 \n 返回 local=lseek(fd1,0,SEEK_END); 的原因,这意味着 10 加一。

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

关于c - 为什么 lseek(fd1,0,SEEK_END) 等于文件大小 + 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49832785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com