linux下C獲取檔案的大小

2021-06-20 07:07:34 字數 2864 閱讀 5454

獲取檔案大小這裡有兩種方法:

方法一、

範例:[cpp]view plain

copy

print?

unsigned long get_file_size(const

char *path)    

方法二、

範例:[c-sharp]view plain

copy

print?

#include 

unsigned long get_file_size(const

char *path)  

else  

return filesize;  

}  

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

下面將stat的詳細資訊貼上出來:

stat(取得檔案狀態)     

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

表頭檔案     #include

#include

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

函式說明     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的路徑名稱太長 

範例     #include

#include

mian() 

執行     /etc/passwd   file   size   =   705 

linux下C獲取檔案的大小

獲取檔案大小這裡有兩種方法 方法一 範例 unsigned long get file size const char path 方法二 範例 include unsigned long get file size const char path else return filesize 此種使用讀...

linux下C獲取檔案的大小

獲取檔案大小這裡有兩種方法 方法一 範例 cpp view plain copy unsigned long get file size const char path 方法二 範例 c sharp view plain copy include unsigned long get file siz...

Linux 下C語言獲取檔案大小

linux 下c語言獲取檔案大小 c語言是一種比較底層的語言,有時在其他語言中很容易操作的事情,在c語言中就比較麻煩,例如獲取乙個檔案的大小。j a中file類有個length函式,python中os.path包中有個getsize函式,c語言中卻沒有程式設計客棧直接對應的函式獲取檔案大小。目前,網...