十 一 檔案屬性的獲取(五)

2021-10-07 05:44:28 字數 3186 閱讀 3019

我們在前面已經學習了檔案的型別,主要有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...