linux C之stat()

2puT發表於2016-07-12

標頭檔案:   

#include <sys/stat.h>
#include <unistd.h>
定義函式:   

int stat(const char *file_name, struct stat *buf);
函式說明:   

通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中
返回值: 

執行成功則返回0,失敗返回-1,錯誤程式碼存於errno
errno:
    ENOENT         引數file_name指定的檔案不存在
    ENOTDIR        路徑中的目錄存在但卻非真正的目錄
    ELOOP          欲開啟的檔案有過多符號連線問題,上限為16符號連線
    EFAULT         引數buf為無效指標,指向無法存在的記憶體空間
    EACCESS        存取檔案時被拒絕
    ENOMEM         核心記憶體不足
    ENAMETOOLONG   引數file_name的路徑名稱太長
範例:

  1. #include <sys/stat.h>  
  2. #include <unistd.h>  
  3. #include <stdio.h>  
  4.   
  5. int main() {  
  6.     struct stat buf;  
  7.     stat("test", &buf);  
  8.     printf("the file size = %d\n", buf.st_size);  
  9. }  


 

stat結構體:
struct stat {
    dev_t         st_dev;       //檔案的裝置編號
    ino_t          st_ino;       //節點
    mode_t      st_mode;      //檔案的型別和存取的許可權
    nlink_t        st_nlink;     //連到該檔案的硬連線數目,剛建立的檔案值為1
    uid_t          st_uid;       //使用者ID
    gid_t          st_gid;       //組ID
    dev_t         st_rdev;      //(裝置型別)若此檔案為裝置檔案,則為其裝置編號
    off_t          st_size;      //檔案位元組數(檔案大小)
    unsigned long st_blksize;   //塊大小(檔案系統的I/O 緩衝區大小)
    unsigned long st_blocks;    //塊數
    time_t        st_atime;     //最後一次訪問時間
    time_t        st_mtime;     //最後一次修改時間
    time_t        st_ctime;     //最後一次改變時間(指屬性)
};

相關文章