0

我正在尝试使用 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;
}
4

2 回答 2

3

这可能是因为\r\n文件中的字符在 Windows 系统上代表换行符。

在我的机器(Mac OS X 10.10)上,您的代码为您的文件提供了正确的结果,前提是它最后没有任何换行符,即只有字符串:(ABCDABCDDABCDABCD输出为:17)。

您正确使用了该函数lseek(),但结果lseek()不是.off_tlong

于 2014-11-22T13:43:43.173 回答
1

可能您的文本文件包含 BOM 标头0xEF,0xBB,0xBF。尝试以 HEX 打印文件内容,看看它是否打印了这额外的 3 个字符。

您可以在此处了解有关 [文件头和 BOM 的更多信息]。( https://en.wikipedia.org/wiki/Byte_order_mark )

于 2017-06-01T14:23:09.363 回答