linux獲取檔案大小的函式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
標頭檔案:#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(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 獲取檔案大小 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...
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...