APUE 檔案和目錄
阿新 • • 發佈:2018-11-10
檔案和目錄
Unix 所有的檔案都對應一個 struct stat
,包含了一個檔案所有的資訊。
#include <sys/stat.h> struct stat { mode_t st_mode; // 檔案型別和使用者訪問許可權 ino_t st_ino; // inode 號 dev_t st_dev; // 檔案系統裝置號 dev_t st_rdev; // 特殊檔案裝置號 nlink_t st_nlink; // 連結(引用)計數,這個指對inode的連結數 uid_t st_uid; // 檔案所有者 ID uff_t st_gid; // 檔案組所有者 ID off_t st_size; // 普通檔案的位元組數 struct timespec st_atime; // 檔案最後訪問的時間 struct timespec st_mtime; // 檔案最後修改的時間 struct timespec st_ctime; // 檔案最後狀態改變的時間,對inode操作 blksize_t st_blksize; // 最佳I/O塊大小 blkcnt_t st_blocks; // 磁碟分配的塊數 };
檔案型別
- 普通檔案
- 目錄檔案
- 塊特殊檔案
- 字元特殊檔案
- FIFO
- 套接字
- 符號連結
可以用 巨集 S_ISXXX(mode)
來判斷具體的檔案型別,或者用 st_mode
與遮蔽字 S_IFMT
進行邏輯“與”運算,巨集定義為:
#define S_ISXXX(mode) ((mode) & S_IFMT)) == S_IFXXX
檔案訪問許可權
檔案訪問許可權(使用者)是由 S_IXXXX 等來控制的,這裡稍微理一下。O_RDWR 這些標誌是檔案開啟讀寫執行時用的,字首為O(open),這裡S(stat)開頭的巨集是關於檔案的型別和使用者檔案訪問許可權的。
S_IRUSR、S_IWUSR、S_IXUSR
S_IRWXU
,其他型別使用者類似。
聯絡遮蔽字umask,有三個八進位制位,分別代表所有者,組,其他使用者。
- 400 使用者讀
- 200 使用者寫
- 100 使用者執行
其他使用者型別類似。在檔案模式中建立遮蔽字為 1 的位,檔案中mode中的相關位將被關閉。
連結
- 硬連結
- 符號連結
每個inode中都有一個連結計數,其值是指向該inode的檔案目錄項數,同時也包含在結構stat中的st_nlink裡。只有當目錄項數減為 0 時,才可刪除該資料塊。這種連結稱為硬連結。
符號連結可以理解為是檔案資料塊的一個指標,刪除了檔案,符號連結也就失效了。
再看個目錄項的連結計數: 一個也目錄下的連結計數最後少為2,一個來自命名改目錄的目錄項,一個是在目錄中的.項。
結語
感覺這章的重點就在這些地方了,檔案系統這一塊我只說了大概,下一篇深入理解下linux的檔案系統