linux下C獲取檔案的大小

2021-07-22 02:43:04 字數 2963 閱讀 9183

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

方法一

範例:

unsigned

long get_file_size(const

char *path)

方法二

範例:

#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_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獲取檔案的大小

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

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語言中卻沒有程式設計客棧直接對應的函式獲取檔案大小。目前,網...