linux獲取檔案大小

2021-09-30 18:33:51 字數 2849 閱讀 7862

原文: 

一、c語言fstat()函式:由檔案描述詞取得檔案狀態

標頭檔案:#include #include

定義函式:int fstat(int fildes, struct stat *buf);

函式說明:fstat()用來將引數fildes 所指的檔案狀態, 複製到引數buf 所指的結構中(struct stat). 

fstat()與stat()作用完全相同, 不同處在於fstat()傳入的引數為已開啟的檔案描述詞. 詳細內容請參考stat().

返回值:執行成功則返回0, 失敗返回-1, 錯誤**存於errno.

範例#include

#include

#include

main()

執行:/etc/passwd file size = 705

二、c語言stat()函式:獲取檔案狀態

標頭檔案:#include #include

定義函式:int stat(const char * file_name, struct stat *buf);

函式說明:stat()用來將引數file_name 所指的檔案狀態, 複製到引數buf 所指的結構中。

下面是struct stat 內各引數的說明:

struct stat

;先前所描述的st_mode 則定義了下列數種情況:

1、s_ifmt 0170000 檔案型別的位遮罩

2、s_ifsock 0140000 scoket

3、s_iflnk 0120000 符號連線

4、s_ifreg 0100000 一般檔案

5、s_ifblk 0060000 區塊裝置

6、s_ifdir 0040000 目錄

7、s_ifchr 0020000 字元裝置

8、s_ififo 0010000 先進先出

9、s_isuid 04000 檔案的 (set user-id on execution)位

10、s_isgid 02000 檔案的 (set group-id on execution)位

11、s_isvtx 01000 檔案的sticky 位

12、s_irusr (s_iread) 00400 檔案所有者具可讀取許可權

13、s_iwusr (s_iwrite)00200 檔案所有者具可寫入許可權

14、s_ixusr (s_iexec) 00100 檔案所有者具可執行許可權

15、s_irgrp 00040 使用者組具可讀取許可權

16、s_iwgrp 00020 使用者組具可寫入許可權

17、s_ixgrp 00010 使用者組具可執行許可權

18、s_iroth 00004 其他使用者具可讀取許可權

19、s_iwoth 00002 其他使用者具可寫入許可權

20、s_ixoth 00001 其他使用者具可執行許可權上述的檔案型別在 posix 中定義了檢查這些型別的巨集定義

21、s_islnk (st_mode) 判斷是否為符號連線

22、s_isreg (st_mode) 是否為一般檔案

23、s_isdir (st_mode) 是否為目錄

24、s_ischr (st_mode) 是否為字元裝置檔案

25、s_isblk (s3e) 是否為先進先出

26、s_issock (st_mode) 是否為socket 若一目錄具有sticky 位 (s_isvtx), 則表示在此目錄下的檔案只能被該檔案所有者、此目錄所有者或root 來刪除或改名.

返回值:執行成功則返回0,失敗返回-1,錯誤**存於errno。

錯誤**:

1、enoent 引數file_name 指定的檔案不存在

2、enotdir 路徑中的目錄存在但卻非真正的目錄

3、eloop 欲開啟的檔案有過多符號連線問題, 上限為16 符號連線

4、efault 引數buf 為無效指標, 指向無法存在的記憶體空間

5、eaccess 訪問檔案時被拒絕

6、enomem 核心記憶體不足

7、enametoolong 引數file_name 的路徑名稱太長

範例#include

#include

main()

執行:/etc/passwd file size = 705

三、使用lseek函式

lseek(fd,0l,seek_end)

表頭檔案

#include

#include

定義函式

off_t lseek(int filde,off_t offset ,int whence);

eek_set 將讀寫位置指向檔案頭後再增加offset個位移量。

seek_cur 以目前的讀寫位置往後增加offset個位移量。

seek_end 將讀寫位置指向檔案尾後再增加offset個位移量。

當whence 值為seek_cur 或seek_end時,引數offet允許負值的出現。

下列是較特別的使用方式:

1) 欲將讀寫位置移到檔案開頭時:

lseek(int fildes,0,seek_set);

2) 欲將讀寫位置移到檔案尾時:

lseek(int fildes,0,seek_end);

3) 想要取得目前檔案位置時:

lseek(int fildes,0,seek_cur);

返回值當呼叫成功時則返回目前的讀寫位置,也就是距離檔案開頭多少個位元組。若有錯誤則返回-1,errno 會存放錯誤**。

可能設定erron的錯誤**:

ebadf: fildes不是乙個開啟的檔案描述符。

espipe:檔案描述符被分配到乙個管道、套接字或fifo。

einval:whence取值不當。

linux獲取檔案大小

摘自 unsigned long get file size const char filename fseek fp,seek set,seek end size ftell fp fclose fp return size 沒有想到的是,在程式執行後發現有的檔案能正確的獲取大小,而有的檔案則不能...

獲取檔案大小

1 找到檔案所在的絕對路徑。系統路徑 projectpath request.getsession getservletcontext getrealpath 檔案路徑 在上傳檔案的時候,一定會有檔案相對路徑,如果不清楚,可以打斷點然後在本地找到此檔案。檔案相對路徑 filepath 絕對路徑rea...

Linux 獲取檔案大小 C函式

分類 基礎知識 2013 05 31 14 23 1766人閱讀收藏 舉報 目錄 cpp view plain copy unsigned long get file size const char path cpp view plain copy include unsigned long get...