Linux 獲取檔案大小 C函式

2021-06-27 16:50:42 字數 2953 閱讀 6110

分類: 基礎知識

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_file_size(const

char *path)    

else    

return filesize;    

}    

此種使用讀取檔案屬性的方法得到檔案的大小,效率較高,也較穩定

stat的詳細資訊如下所示:

1) stat(取得檔案狀態)     

相關函式     fstat,lstat,chmod,chown,readlink,utime 

2) 表頭檔案    

#include

#include

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

4) 函式說明

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

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

struct   stat 

; st_dev   檔案的裝置編號 

st_ino   檔案的i-node 

st_mode   檔案的型別和訪問的許可權 

st_nlink   連到該檔案的硬連線數目,剛建立的檔案值為1。 

st_uid   檔案所有者的使用者識別碼 

st_gid   檔案所有者的組識別碼 

st_rdev   若此檔案為裝置裝置檔案,則為其裝置編號 

st_size   檔案大小,以位元組計算 

st_blksize   檔案系統的i/o   緩衝區大小。 

st_blcoks   占用檔案區塊的個數,每一區塊大小為512   個位元組。 

st_atime   檔案最近一次被訪問或被執行的時間,一般只有在用mknod、utime、read、write與tructate時改變。 

st_mtime   檔案最後一次被修改的時間,一般只有在用mknod、utime和write時才會改變 

st_ctime   i-node最近一次被更改的時間,此引數會在檔案所有者、組、許可權被更改時更新先前所描述的st_mode   則定義了下列數種情況 

s_ifmt   0170000   檔案型別的位遮罩 

s_ifsock   0140000   scoket 

s_iflnk   0120000   符號連線 

s_ifreg   0100000   一般檔案 

s_ifblk   0060000   區塊裝置 

s_ifdir   0040000   目錄 

s_ifchr   0020000   字元裝置 

s_ififo   0010000   先進先出 

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

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

s_isvtx   01000   檔案的sticky位 

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

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

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

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

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

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

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

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

s_ixoth   00001   其他使用者具可執行許可權 

上述的檔案型別在posix   中定義了檢查這些型別的巨集定義 

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

s_isreg   (st_mode)   是否為一般檔案 

s_isdir   (st_mode)是否為目錄 

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

s_isblk   (s3e)   是否為先進先出 

s_issock   (st_mode)   是否為socket 

若一目錄具有sticky   位(s_isvtx),則表示在此目錄下的檔案只能被該檔案所有者、此目錄所有者或root來刪除或改名。 

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

錯誤**     enoent   引數file_name指定的檔案不存在 

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

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

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

eaccess   訪問檔案時被拒絕 

enomem   核心記憶體不足 

enametoolong   引數file_name的路徑名稱太長 

5) 範例

[cpp]view plain

copy

#include 

#include 

mian()   

執行結果:/etc/passwd   file   size   =   705

linux獲取檔案大小

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

linux獲取檔案大小

原文 一 c語言fstat 函式 由檔案描述詞取得檔案狀態 標頭檔案 include include 定義函式 int fstat int fildes,struct stat buf 函式說明 fstat 用來將引數fildes 所指的檔案狀態,複製到引數buf 所指的結構中 struct sta...

C 獲取檔案大小

在c語言中測試檔案的大小,主要使用二個標準函式。1.fseek 函式原型 intfseek file stream,long int offset,int origin 引數說明 stream,檔案流指標 offest,偏移量 orgin,原 始位置。其中orgin的可選值有seek set 檔案開...