我們在前面已經學習了檔案的型別,主要有5類7個:普通檔案(-),目錄檔案(d),管道檔案(p),連線檔案(l),裝置檔案:(字元裝置檔案c,塊裝置檔案b,套接字s)。我們今天來學習如何獲取檔案屬性和判斷檔案型別,主要的方法就是三個函式。
二、fstat,lstat函式&三者的區別
stat函式用來獲取linux檔案的屬性,標頭檔案為 #include ,詳細資訊如下:
1.stat函式原型:
int stat(const char*pathname,struct stat *buf)
2.stat函式引數:
struct stat
printf
("檔案大小:%d\n"
,st.st_size)
;printf
("檔案裝置:%d\n"
,st.st_dev)
;printf
("檔案塊:%d\n"
,st.st_blocks)
;printf
("檔案節點:%d\n"
,st.st_ino)
;printf
(,st.st_nlink)
;printf
("uid:%d\n"
,st.st_uid)
;printf
("gid:%d\n"
,st.st_gid)
;exit(0);}
執行結果:
stat命令和函式的作用一樣,都是顯示乙個檔案的狀態資訊,只不過乙個在**中實現,乙個在終端上實現。
1.stat函式用法:
stat filename //顯示filename的所有詳細資訊,可以為普通檔案,裝置檔案等
2.選項:
stat後面可以加不同的選項,顯示乙個檔案的不同資訊,可以新增的選項和示例如下表所示:
選項含義
示例-f
顯示檔案系統的資訊
stat -f main.c //顯示檔案系統的詳細資訊
*檢視該目錄下的所有檔案和子目錄詳細資訊
stat *
-t以簡潔的方式輸出
stat -t main.c //簡潔輸出檔案資訊
3.示例演示:
簡短顯示:
1.檔案型別:
在stat結構體中有乙個成員變數為mode_t st_mode,表示檔案型別和許可權,它是乙個16位short型別的變數,對應16個標誌位,組成如下:
linux的標頭檔案為我們提供了一系列的檔案型別巨集,可以用man 2 stat檢視幫助文件,方便我們進行判斷檔案型別,具體如下:
巨集檔案型別
s_isreg()
普通檔案
s_isdir()
目錄檔案
s_ischr()
字元特殊檔案
s_isblk()
塊特殊檔案
s_isfifo()
管道或fifo
s_islnk()
符號鏈結
s_issock()
套接字s_ifmt
掩碼。過濾st_mode中除檔案型別以外的資訊
2.判斷檔案型別:
有兩種方法可以判斷檔案型別:
檔案型別巨集(st_mode) //判斷是否為這個型別的檔案,是返回1,否則返回0
如: s_isreg(st_mode)//判斷是否為普通檔案;其他的檔案型別判斷一樣:
if((st.st_mode & s_ifmt)==檔案型別巨集 )//判斷檔案型別是否為這個檔案型別巨集型別的檔案,是返回1,否則返回0
如:if((st.st_mode & s_ifmt)==s_isreg)//判斷是否為普通檔案。
st_mode中也包含了檔案訪問許可權位,所以我們可以根據st_mode變數來判斷檔案許可權,首先我們先了解常用的檔案許可權表示方式:
st_mode遮蔽
含義s_irusr
使用者讀s_iwusr
使用者寫s_ixusr
使用者執行
s_irgrp
組讀s_iwgrp
組寫s_ixgrp
組執行s_iroth
其他讀s_iwoth
其他寫s_ixoth
其他執行
普通檔案的讀,寫,執行就是字面的意思,但是目錄檔案卻不是,它的含義是:
(1)讀許可權。讀許可權允許我們通過opendir()函式讀取目錄,進而可以通過readdir()函式獲得目錄內容,即目錄下的檔案列表。
(2)寫許可權。寫許可權代表的是可在目錄內建立、刪除檔案,而不是指的寫目錄本身。
(3)執行許可權。可訪問目錄中的檔案。
檔案許可權的判斷和檔案型別判斷方式很像,和st_mode中的數值進行與運算即可,判斷對應位是否一致:
if(st.st_mode &檔案許可權巨集) //判斷該檔案使用者是否對應巨集描述的許可權
如st.st_mode & s_ixusr判斷該檔案是否有使用者執行許可權。
1.fstat函式:
int fstat(int fd,struct stat *buf)
fd為檔案描述符,buf即stat型別的結構體,和stat函式一樣。成功返回0,出錯返回-1。
2.lstat函式:
int lstat(const char*pathname,struct stat *buf)
引數和返回值和stat一樣。
3.三者的區別:
加油哦!?。
Qt獲取檔案屬性
在qt中有qfileinfo類專門提供了獲取檔案資訊的各種介面,比如檔名稱,位置資訊,檔案的許可權,目錄,檔案或符號連線,檔案大小,建立時間,最後修改時等等,下面通過 來看一些具體的屬性獲取。ifndef mainwindow h define mainwindow h include qt beg...
獲取檔案屬性函式
表頭檔案 include 函式定義 int stat const char file name,struct stat buf 函式說明 通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中 返回值 執行成功則返回0,失敗返回 1,錯誤 存於errno 需要include er...
常用檔案屬性獲取
朱老師物聯網大講堂 學習筆記 檔案屬性,檔案的屬性資訊,只能被專用的api開啟看到,常用的api有,stat,fstat,lstat,同時stat也是乙個shell命令,其內部呼叫的也是stat,int stat const char path,struct stat buf int fstat i...