C Lseek不工作
我正在尝试使用lseek检查我的txt文件的大小。不幸的是我没有工作。 我的T.Txt包含16个字符:abcdabcddabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc。所以数字变量应该是16+1。为什么是19呢?第二个问题为什么我不能使用 从最后一个位置1开始搜索_END-1。?如果你能帮我,我将不胜感激C Lseek不工作,c,file-descriptor,lseek,C,File Descriptor,Lseek,我正在尝试使用lseek检查我的txt文件的大小。不幸的是我没有工作。 我的T.Txt包含16个字符:abcdabcddabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc。所以数字变量应该是16+1。为什么是19呢?第二个问题为什么我不能使用 从最后一个位置1开始搜索_END-1。?如果你能帮我,我将不胜感激 int main
int main(void)
{
int fd1 = open("T.txt", O_RDONLY);
long number;
if (fd1 < 0) {
return -1;
}
number = lseek(fd1, 0, SEEK_END);
printf("FILE size PROGRAM>C: %ld\n", number);
return 0;
}
int main(无效)
{
int fd1=打开(“T.txt”,仅限Ordu);
长数;
if(fd1<0){
返回-1;
}
编号=lseek(fd1,0,搜索结束);
printf(“文件大小程序>C:%ld\n”,编号);
返回0;
}
这可能是因为文件中的\r\n
字符在Windows系统中代表换行符
在我的机器(Mac OS X 10.10)上,如果文件末尾没有任何换行符,即只有字符串:abcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd
您正确使用了lseek()
函数,除了lseek()
的结果是off\t
不是long
这可能是因为文件中的\r\n
字符在Windows系统中代表换行符
在我的机器(Mac OS X 10.10)上,如果文件末尾没有任何换行符,即只有字符串:abcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd
除了lseek()
的结果是off\t
而不是长的之外,您可以正确使用lseek()
功能。您的文本文件可能包含BOM标题0xEF、0xBB、0xBF
。
试着用十六进制打印文件内容,看看它是否打印出这3个额外的字符
您可以在此了解有关[文件头和BOM表]的更多信息。()您的文本文件可能包含BOM表头0xEF、0xBB、0xBF
。
试着用十六进制打印文件内容,看看它是否打印出这3个额外的字符
您可以在此处了解有关[文件头和BOM]的更多信息。()可能是因为BOM。OT:lseek()
返回off\t
notlong
SEEK\u END
本身不是一个“数字”,而是一个enum
。基本上,它是告诉lseek()
在文件中跳到哪里的一种方法。你不能(合理地)对它进行算术运算。可能是因为一个BOM.OT:lseek()
返回off\t
notlong
SEEK\u END
本身不是一个“数字”,而是一个枚举。基本上,它是告诉lseek()
在文件中跳到哪里的一种方法。你不能(合理地)用它做算术。那SEEK_END-1呢?为什么我得到的不是18而是0?@user3402584:SEEK_END在大多数实现中是一个常量--2
。将其更改为1
,这是SEEK\u CUR
的常量。你误解了它的目的;这只是为了说明seek
的另一个参数是什么意思。seek\u END-1呢?为什么我得到的不是18而是0?@user3402584:SEEK_END在大多数实现中是一个常量--2
。将其更改为1
,这是SEEK\u CUR
的常量。你误解了它的目的;它只是告诉你seek
的另一个参数是什么意思。