Lseek不工作

时间:2014-11-22 13:39:09

标签: c file-descriptor lseek

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

2 个答案:

答案 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