如何寻找文件的末尾来确定文件大小?

时间:2011-10-13 16:19:03

标签: c filesize seek

我正在尝试使用seek在c编程中获取文件大小。我不能使用fseek,stat.size或ftell,这是我需要运行的自定义操作系统unix。 我怎样才能通过使用seek找到filesize?可能吗?谢谢!

FILE *fd = open(argv[1], "r");

  if(fd == NULL)
  {
          printf("Not able to open the file : %s\n", argv[1]);
          return;
  }

  // Set the pointer to the end
   seek(fd, 0, SEEK_END);

3 个答案:

答案 0 :(得分:7)

seek?你的意思是lseek。看看manual pagelseek返回什么?

答案 1 :(得分:3)

如果你只是想知道使用offset = 0和whence = SEEK_END的构造是否会将文件偏移定位到文件的末尾,那么“是”你是对的,至少对于“标准f / lseek”来说我遇到了。

lseek应直接返回文件偏移量。 对于fseek,以下ftell将为您提供文件偏移量。

答案 2 :(得分:1)

通常,open()返回一个int,而不是FILE *。您必须检查返回值&gt; = 0. fopen() <stdio.h>返回FILE *。此外,对于记录,fopen()fseek()是C标准库的一部分。 UNIX open()是POSIX的一部分。因此,一般情况下,fopen() / fseek()更具可移植性。

如果你真的在一个自定义的“类Unix”环境中,那就不再那么真实(即你有一个自定义API而不是unistd.h)那么你在这里不会得到一个好的答案没有提供更多信息。你能告诉我们你在运行什么操作系统吗?

或者像Luther建议的那样,如果您使用普通lseek(),请检查<unistd.h>的返回值。