檔案的相關資訊
檔案有哪些相關資訊呢?
使用者關心的:檔案型別、檔名、檔案大小、檔案目錄、檔案所有者、檔案訪問修改日期。
這些資訊儲存在struct stat結構中(sys/stat.h)
系統關心的:檔案狀態、檔案的儲存資訊。
系統相關的資訊大部分在inode, vnode, 檔案表中。
獲取stat結構的api: int stat(const char * file_name,struct stat *buf);
使用stat函式最多的可能是 ls -l命令
int lstat (const char * file_name.struct stat * buf);
lstat與stat的區別在於,當檔案為符號鏈結時,lstat會返回鏈結本身的狀態。
檔案型別
普通檔案
目錄檔案
字元特殊檔案
塊特殊檔案
fifo
套介面符號鏈結
使用者id與組id
1 實際使用者id和實際組id,標識我們究竟是誰。即當前在使用系統的使用者。比如我的使用者名稱是robin(id是1000),那麼我的實際使用者id就是1000。通常在乙個登入回話區間這些值是不會改變的。
2 有效使用者id和有效使用者組id -- 決定了我們的檔案訪問許可權。
通常1 和 2是相等的,特殊情況下才不等。特殊情況就是設定了乙個特殊標誌位(st_mode)。其定義是:當執行此檔案時,將程序的有效使用者id設定為檔案的所有者( st_uid )。
什麼情況需要設定這個位呢?
當某個程式執行時需要root使用者許可權來完成某些操作,你又希望一般使用者可以執行這個程式,這時候就可以通過設定這個標誌位來達到這個目的。
怎麼設定?
chmod u+s filename (suid)
通常需要先把檔案所有者設為root
下面三個函式可以更改uid, gid
int chown(const char * path, uid_t owner,gid_t group);
int fchown(int fd,uid_t owner,gid_t group);
int lchown(const char * path, uid_t owner,gid_t group);//涉及到符號鏈結時用
檔案訪問許可權
用9個許可許可權位表示
owner group others
1 2 3 4 5 6 7 8 9 左到右為讀,寫,執行
某位為1表示具有相應許可權
用chmod命令來設定
u:所有者 g:表示同組使用者 o:表示其它使用者 +: 表示增加 -: 表示刪除(許可權)
chmod a+xwr file
chmod a-x file
chmod o+x file
chmod 600 file 所有者有讀寫許可權
chmod 777 file 所有人有讀寫執行的許可權
為了在乙個目錄中建立乙個新檔案,你需要有該目錄的寫許可權和可執行許可權。
為了刪除乙個檔案,你需要有該檔案的寫許可權和可執行許可權。
下面兩個函式也允許我們改變現存盤案的許可權
int chmod(const char * path,mode_t mode);
int fchmod(int fildes,mode_t mode);
access函式,判斷檔案是否具有訪問許可權
int access(const char * pathname,int mode);
引數mode有幾種情況組合,r_ok,w_ok,x_ok和 f_ok。r_ok,w_ok與 x_ok用來檢查檔案是否具有讀取、寫入和執行的許可權。返回0表示成功。
umask函式,遮蔽許可權位(建立檔案時預設關閉哪些許可權位)
例如:umask 0
touch file
那麼file將具有如下的許可權
-rw-rw-rw-
umask 066
touch file
那麼file將具有如下的許可權
-rw-------
可以在shell中用,也有umask函式。
檔案長度
wc -c file 計算檔案中的位元組數。
wc, du 命令
檔案系統
檢視磁碟空間
df -h
硬鏈結直接指向i節點
link newfile oldfile
ln -s file linkfile -- 符號鏈結
其它api
目錄相關:mkdir, rmdir, chdir, fchdir
檔案狀態:utime
同步:sync, fsync
(傳統的unix實現在核心中設有緩衝儲存器,sync同步檔案內容和快取儲存器)
對檔案的所有屬性以及對檔案進行操作的所有函式有完整的了解對各種unix程式的設計都非常重要。
UNIX常見的目錄和檔案
unxi 程式檔案,unix核心。etc 供系統維護管理用的命令和配置檔案。etc issue 登入前在login之上的提示資訊 tmp,usr tmp 存放臨時檔案 bin 系統常用的命令,如ls,ln,cp,cat dev 存放裝置檔案,如終端裝置檔案 usr include c語言標頭檔案存放...
《unix高階環境程式設計》檔案和目錄 目錄操作
目錄的基本操作包括開啟目錄opendir 讀取目錄readdir 關閉目錄closedir等操作,如下說明 cpp view plain copy 目錄操作 1 開啟目錄opendir 函式功能 開啟乙個目錄 返回值 若成功返回乙個目錄指標,若出錯則返回null指標 函式原型 include inc...
UNIX目錄簡介
是檔案系統的根目錄,是整個檔案系統的主要目錄,以及超級使用者的主目錄 bin 存放最常用的基本使用者程式 home 系統存放所有使用者私有目錄的地方 mnt 用於安裝cd rom 軟碟機 zip驅動器或jaz驅動器等 可移動媒介 dev 與硬體裝置相關的檔案,多數為裝置檔案 dev dsk 磁碟裝置...