你如何通过fd获得文件大小?

时间:2011-06-30 15:44:21

标签: c filesize

我知道我可以通过FILE *获得fseek的文件大小,但我所拥有的只是一个INT fd。

在这种情况下如何获取文件大小?

3 个答案:

答案 0 :(得分:16)

fstat会奏效。但我不确定你如何计划通过fseek获取文件大小,除非你也使用ftell(例如fseek到最后,然后ftell你在哪里)。 fstat更好,即使对于FILE,因为你可以从FILE句柄获取文件描述符(通过fileno)。

   stat, fstat, lstat - get file status
   int fstat(int fd, struct stat *buf);

       struct stat {
       …
           off_t     st_size;    /* total size, in bytes */
       …
       };

答案 1 :(得分:16)

您可以使用lseek SEEK_END作为原点,因为它会返回文件中的新偏移量,例如

off_t fsize;

fsize = lseek(fd, 0, SEEK_END);

答案 2 :(得分:2)

我喜欢将我的代码示例编写为函数,以便它们可以剪切并粘贴到代码中:

int fileSize(int fd) {
   struct stat s;
   if (fstat(fd, &s) == -1) {
      int saveErrno = errno;
      fprintf(stderr, "fstat(%d) returned errno=%d.", fd, saveErrno);
      return(-1);
   }
   return(s.st_size);
}