fstat函式及struct stat結構
功能:由檔案描述符取得檔案狀態。
二、struct stat結構體
定義如下:
struct stat {
dev_t st_dev; // 檔案所在裝置ID
ino_t st_ino; // 結點(inode)編號
mode_t st_mode; // 保護模式
nlink_t st_nlink; // 硬連結個數
uid_t st_uid; // 所有者使用者ID
gid_t st_gid; // 所有者組ID
dev_t st_rdev; // 裝置ID(如果是特殊檔案)
off_t st_size; // 總體尺寸,以位元組為單位
blksize_t st_blksize; // 檔案系統 I/O 塊大小
blkcnt_t st_blocks; // 已分配 512B 塊個數
time_t st_atime; // 上次訪問時間
time_t st_mtime; // 上次更新時間
time_t st_ctime; // 上次狀態更改時間
};
st_dev欄位描述該檔案所在的裝置。(major() 和minor()巨集可能在分析這個裝置ID域時有用。)
st_rdev 欄位描述這個檔案(inode)本身代表的裝置。
st_size欄位給出檔案位元組尺寸(如果它是一個普通檔案或符號連結)。對於符號連結而言是它所有包含路徑名長度,不包括結尾的空字元。
st_blocks 欄位指明檔案已經分配資料塊的個數,資料塊以 512 位元組為單位。(這可能小於st_size/512,當檔案有空洞時。)
st_blksize 給出對於高效檔案系統 I/O 操作的優先塊尺寸。(資料以小尺寸塊寫入檔案時可能導致低效的讀-更改-覆蓋 操作。)
不是所有的 Linux 檔案系統實現了所有的時間域。一些檔案系統允許掛載時不去訪問檔案或目錄且不會導致st_atime 欄位更新。(參考 mount() 的noatime、nodiratime 和relatime,以及mount() 中相關的資訊。)此外,如果檔案以O_NOATIME 標誌開啟,st_atime 不會被更新。
st_atime欄位在檔案訪問時更改,比如,execve()、mknod()、pipe()、utime() 和read()(多於零個位元組)。
域 st_mtime在檔案更改時更新,比如,mknod()、truncate()、utime() 和write()(多於零個位元組)。再者,一個目錄的st_mtime在這個目錄裡建立或刪除檔案時更新。st_mtime 在更改所有者、組、硬連結個數或許可權模式時 不會更新。
st_ctime 欄位在寫入或設定結點(inode)資訊(如所有者、組、連結數、許可權等等)時會更改。
下面 POSIX 巨集用於使用 st_mode 欄位測試檔案型別:
-
- S_ISREG(m)
- 它是普通檔案嗎?
- S_ISDIR(m)
- 目錄嗎?
- S_ISCHR(m)
- 字元裝置?
- S_ISBLK(m)
- 塊裝置?
- S_ISFIFO(m)
- FIFO(命名管道)?
- S_ISLNK(m)
- 符號連結?(不在 POSIX.1-1996。)
- S_ISSOCK(m)
- 套介面?(不在 POSIX.1-1996。)
下面標誌為 st_mode 域定義:
S_IFMT | 0170000 | 檔案型別位域掩碼 |
S_IFSOCK | 0140000 | 套介面 |
S_IFLNK | 0120000 | 符號連結 |
S_IFREG | 0100000 | 普通檔案 |
S_IFBLK | 0060000 | 塊裝置 |
S_IFDIR | 0040000 | 目錄 |
S_IFCHR | 0020000 | 字元裝置 |
S_IFIFO | 0010000 | FIFO |
S_ISUID | 0004000 | 設定 UID 位 |
S_ISGID | 0002000 | 設定 組ID 位 (看下面) |
S_ISVTX | 0001000 | 粘滯位(看下面) |
S_IRWXU | 00700 | 檔案所有者許可權掩碼 |
S_IRUSR | 00400 | 所有者有讀許可權 |
S_IWUSR | 00200 | 所有者有寫許可權 |
S_IXUSR | 00100 | 所有者有執行許可權 |
S_IRWXG | 00070 | 組許可權掩碼 |
S_IRGRP | 00040 | 組有讀許可權 |
S_IWGRP | 00020 | 組有寫許可權 |
S_IXGRP | 00010 | 組有執行許可權 |
S_IRWXO | 00007 | 其他使用者許可權掩碼(不在組內) |
S_IROTH | 00004 | 其他有讀許可權 |
S_IWOTH | 00002 | 其他有寫許可權 |
S_IXOTH | 00001 | 其他有執行許可權 |
設定組ID位S_ISGID)有多個特殊用處。對於一個目錄而言,它指明 BSD語義應用到這個目錄;建立的檔案繼承其父目錄的組ID,而不是來自建立程式的有效組ID,並且建立的目錄同時也會獲得S_SIGID位設定。對於一個沒有組執行許可權位(S_IXGRP)檔案而言,設定組ID位用於指明託管檔案/記錄鎖。
在目錄上的粘滯位(S_ISVTX)表示目錄裡的檔案只有其所有者,目錄所有者,和特權程式,可以對其進行重新命名或刪除。
相關文章
- c/c++語言函式 stat, fstat, lstat, fstatat - get file statusC++函式
- 有關struct timeval結構體 以及 gettimeofday()函式Struct結構體函式
- 結構 STRUCTStruct
- 結構體struct結構體Struct
- 函式呼叫暫存器及棧幀結構函式
- 迭代查詢 樹形結構及常用的函式函式
- 認知結構(C# Struct)C#Struct
- C時間函式strftime、struct timespec 和 struct timeval函式Struct
- Golang物件導向程式設計之建構函式【struct&new】Golang物件程式設計函式Struct
- 俄羅斯方塊的資料結構及實現 struct of a tetris資料結構Struct
- 結構體定義:struct與typedef struct 用法詳解和用法小結結構體Struct
- C語言fstat()函式:由檔案描述詞取得檔案狀態C語言函式
- 建構函式、原型及原型鏈函式原型
- Golang 學習——結構體 struct (一)Golang結構體Struct
- Golang 學習——結構體 struct (二)Golang結構體Struct
- go 結構體 (struct) 和方法 (method)Go結構體Struct
- 瞭解下C# 結構體(Struct)C#結構體Struct
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- 樣式及結構複用
- C++再議建構函式及複製建構函式深度複製C++函式
- struct 結構體 -Go 學習記錄Struct結構體Go
- golang 學習之路之 struct 結構體GolangStruct結構體
- mysql表結構自動生成golang structMySqlGolangStruct
- c#之結構struct(2)_小記C#Struct
- 【STAT】函式索引和使用表示式統計資訊有什麼不同函式索引
- 建構函式與解構函式函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- C語言結構體及函式傳遞陣列引數示例C語言結構體函式陣列
- 轉載:尤拉函式知識點總結及程式碼模板及尤拉函式表函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- 控制結構與函式練習(一)函式
- 控制結構與函式練習(二)函式
- 控制結構與函式練習(三)函式
- interrupt結構體和相關函式結構體函式
- 虛解構函式(√)、純虛解構函式(√)、虛建構函式(X)函式
- 上下文 Context 與結構體 StructContext結構體Struct
- Golang中struct結構標籤(Tag)的使用GolangStruct
- 程式控制塊PCB結構 task_struct 描述Struct