默认站点
收集整理的這篇文章主要介紹了
fstat、stat和lstat 区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
nt?fstat(int?filedes,?struct?stat?*buf);
int?stat(const?char?*path,?struct?stat?*buf);
int?lstat(const?char?*path,?struct?stat?*buf);
一眼就能看出來(lái)fstat的第一個(gè)參數(shù)是和另外兩個(gè)不一樣的,fstat區(qū)別于另外兩個(gè)系統(tǒng)調(diào)用的地方在于,fstat系統(tǒng)調(diào)用接受的是?一個(gè)“文件描述符”,而另外兩個(gè)則直接接受“
文件全路徑”。文件描述符是需要我們用open系統(tǒng)調(diào)用后才能得到的,而文件全路經(jīng)直接寫就可以了。
stat和lstat的區(qū)別:當(dāng)文件是一個(gè)符號(hào)鏈接時(shí),lstat返回的是該符號(hào)鏈接本身的信息;而stat返回的是該鏈接指向的文件的信息。(這樣記,lstat比stat多了一個(gè)l,因此它是
有本事處理符號(hào)鏈接文件的,因此當(dāng)遇到符號(hào)鏈接文件時(shí),lstat當(dāng)然不會(huì)放過(guò)。而?stat系統(tǒng)調(diào)用沒(méi)有這個(gè)本事,它只能對(duì)符號(hào)鏈接文件睜一只眼閉一只眼,直接去處理鏈接所指
文件嘍)?
/*??*?Linux文件屬性結(jié)構(gòu)體信息??*?struct?stat??*?{??*??dev_t?st_dev;//設(shè)備??*??ino_t?st_ino;//結(jié)點(diǎn)??*??mode_t?st_mode;//模式??*??nlink_t?st_nlink;//硬連接??*??uid_t?st_uid;//用戶ID??*??gid_t?st_gid;//組ID??*??dev_t?st_rdev;//設(shè)備類型??*??off_t?st_off;//文件字節(jié)數(shù)??*??unsigned?long?st_blksize;//塊大小??*??unsigned?long?st_blocks;//塊數(shù)??*??time_t?st_atime;//最后一次訪問(wèn)時(shí)間??*??time_t?st_mtime;//最后一次修改時(shí)間??*??time_t?st_ctime;//最后一次屬性改變時(shí)間??*?}??*?可通過(guò)stat或fstat函數(shù)獲得文件的其他屬性??*?stat函數(shù)用來(lái)判斷沒(méi)有打開(kāi)的文件,而fstat函數(shù)用來(lái)判斷打開(kāi)的文件。??*??*/?#include?<unistd.h>??#include?<sys/stat.h>???int?main(void)??{??????struct?stat?buf;??????stat("/etc/passwd",&buf);??????/*??????*?stat函數(shù)??????*?取得文件的屬性??????*?sys/stat.h,unistd.h??????*?int?stat(const?char?*file_name,struct?stat*buf);??????*?將參數(shù)file_name所指的文件狀態(tài)復(fù)制到參數(shù)buf所指的結(jié)構(gòu)中??????*?成功返回0,失敗返回-1,錯(cuò)誤存儲(chǔ)于errno??????*/??????printf("/etc/passwd文件的大小是:%d/n",buf.st_size);??????printf("/etc/passwd文件的最后一次修改時(shí)間是:%d/n",buf.st_ctim);??????return?0;??}??
總結(jié)
以上是默认站点為你收集整理的fstat、stat和lstat 区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。