我使用的系统是 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的解释:文件末尾的偏移量),这让我很困惑很多。 为什么?
文件内容的图片:
命令'wc'的结果:
答案 0 :(得分:2)
如果您使用f3.txt
创建vi
并默认推出123456789
,则会在行末添加一个新行\n
,这就是为什么local=lseek(fd1,0,SEEK_END);
会返回{{} 1}}这意味着10
加一。
您可以在命令行运行newline
并验证。