nt?fstat(int?filedes,?struct?stat?*buf);
int?stat(const?char?*path,?struct?stat?*buf);
int?lstat(const?char?*path,?struct?stat?*buf);
一眼就能看出來fstat的第一個參數是和另外兩個不一樣的,fstat區別于另外兩個系統調用的地方在于,fstat系統調用接受的是?一個“文件描述符”,而另外兩個則直接接受“
文件全路徑”。文件描述符是需要我們用open系統調用后才能得到的,而文件全路經直接寫就可以了。
stat和lstat的區別:當文件是一個符號鏈接時,lstat返回的是該符號鏈接本身的信息;而stat返回的是該鏈接指向的文件的信息。(這樣記,lstat比stat多了一個l,因此它是
有本事處理符號鏈接文件的,因此當遇到符號鏈接文件時,lstat當然不會放過。而?stat系統調用沒有這個本事,它只能對符號鏈接文件睜一只眼閉一只眼,直接去處理鏈接所指
文件嘍)?
- /*?
- ?*?Linux文件屬性結構體信息?
- ?*?struct?stat?
- ?*?{?
- ?*??dev_t?st_dev;//設備?
- ?*??ino_t?st_ino;//結點?
- ?*??mode_t?st_mode;//模式?
- ?*??nlink_t?st_nlink;//硬連接?
- ?*??uid_t?st_uid;//用戶ID?
- ?*??gid_t?st_gid;//組ID?
- ?*??dev_t?st_rdev;//設備類型?
- ?*??off_t?st_off;//文件字節數?
- ?*??unsigned?long?st_blksize;//塊大小?
- ?*??unsigned?long?st_blocks;//塊數?
- ?*??time_t?st_atime;//最后一次訪問時間?
- ?*??time_t?st_mtime;//最后一次修改時間?
- ?*??time_t?st_ctime;//最后一次屬性改變時間?
- ?*?}?
- ?*?可通過stat或fstat函數獲得文件的其他屬性?
- ?*?stat函數用來判斷沒有打開的文件,而fstat函數用來判斷打開的文件。?
- ?*?
- ?*/?
- #include?<unistd.h>??
- #include?<sys/stat.h>???
- int?main(void)??
- {??
- ????struct?stat?buf;??
- ????stat("/etc/passwd",&buf);??
- ????/*?
- ?????*?stat函數?
- ?????*?取得文件的屬性?
- ?????*?sys/stat.h,unistd.h?
- ?????*?int?stat(const?char?*file_name,struct?stat*buf);?
- ?????*?將參數file_name所指的文件狀態復制到參數buf所指的結構中?
- ?????*?成功返回0,失敗返回-1,錯誤存儲于errno?
- ?????*/??
- ????printf("/etc/passwd文件的大小是:%d/n",buf.st_size);??
- ????printf("/etc/passwd文件的最后一次修改時間是:%d/n",buf.st_ctim);??
- ????return?0;??
- }??