我正在尝试使用lseek检查我的txt文件的大小。不幸的是我不工作。 我的T.Txt包含16个字符:ABCDABCDDABCDABCD仅此而已。所以数字变量应该有16 + 1。为什么它是19?我无法使用的第二个问题 SEEK_END-1从上一个位置-1开始。?我很感激你的帮助。
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;
}
答案 0 :(得分:3)
这可能是因为您的文件中有\r\n
个字符,代表Windows系统上的换行符。
在我的机器上(Mac OS X 10.10),您的代码会为您的文件提供正确的结果,前提是它没有任何换行符,即只有字符串:ABCDABCDDABCDABCD
(输出为然后:17)。
您正确使用lseek()
功能,但lseek()
的结果为off_t
而不是long
。
答案 1 :(得分:1)
您的文本文件可能包含BOM表头0xEF,0xBB,0xBF
。
尝试在HEX中打印文件内容,看看它是否打印了这3个额外的字符。
您可以在此处详细了解[文件标题和BOM]。(https://en.wikipedia.org/wiki/Byte_order_mark)