簡體   English   中英

你如何通過 fd 獲取文件大小?

[英]How do you get file size by fd?

我知道我可以通過fseek獲得FILE *的文件大小,但我所擁有的只是一個 INT fd。

在這種情況下如何獲取文件大小?

您可以使用lseekSEEK_END作為原點,因為它返回文件中的新偏移量,例如。

off_t fsize;

fsize = lseek(fd, 0, SEEK_END);

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 */
       …
       };

我喜歡將我的代碼示例編寫為函數,以便可以將它們剪切並粘貼到代碼中:

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);
}

注意:@AnttiHaapala 指出 st_size 不是 int 因此此代碼將在 64 台機器上失敗/編譯錯誤。 修復將返回值更改為 64 位有符號 integer 或與 st_size (off_t) 相同的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM