[英]How do you get file size by fd?
我知道我可以通過fseek
獲得FILE *
的文件大小,但我所擁有的只是一個 INT fd。
在這種情況下如何獲取文件大小?
您可以使用lseek
和SEEK_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.