2.文件和目錄

文件和目錄

上一節(jié)主要講述文件IO伏伯,這一節(jié)內(nèi)容是文件系統(tǒng)的其他特征和文件的性質(zhì)橘洞。

1.函數(shù)stat、fstat说搅、fstatat和lstat

本節(jié)主要討論四個函數(shù):

#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf );
int fstat(int fd, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf );
int fstatat(int fd, const char *restrict pathname, struct stat *restrict buf, int flag);
/* 返回值:成功返回0炸枣,失敗返回-1 */

stat返回命名文件有關的信息結構;fstat獲得描述符fd上打開文件的有關信息弄唧;lstat類似stat适肠,但是當命名文件是一個符號鏈接時返回該符號鏈接的有關信息而不是符號鏈接引用的文件,用于降序遍歷目錄層次結構候引;fstatat為一個相對于當前打開目錄(fd指向)的路徑名返回文件統(tǒng)計信息侯养,第二個參數(shù)buf是一個指針,指向我們必須提供的結構澄干。

2.文件類型

Unix文件類型包括下面幾種:

  • 普通文件逛揩,包含某種形式的數(shù)據(jù)
  • 目錄文件,包含其他文件的名字以及指向與這些文件有關信息的指針麸俘,對一個目錄文件具有讀權限的任意進程都可以讀該目錄內(nèi)容辩稽,但是只有內(nèi)核可以直接寫目錄文件
  • 塊特殊文件,這種類型的文件提供對設備帶緩沖的訪問从媚,每次訪問以固定長度為單位進行
  • 字符特殊文件搂誉,提供對設備不帶緩沖的訪問,每次訪問長度可變
  • FIFO静檬,用于進程間通信炭懊,有時也稱為命名管道
  • 套接字,用于進程間網(wǎng)絡通信
  • 符號鏈接拂檩,用于指向另一個文件

3.設置用戶ID和組ID

與一個進程關聯(lián)的ID:

ID 含義
1.實際用戶ID和實際組ID 標志用戶實際是誰
2.有效用戶ID侮腹、有效組ID和附屬組ID 用于文件訪問權限檢查
3.保存的設置用戶ID和設置組ID 由exec函數(shù)保存

4.access和faccessat

這兩個函數(shù)是按實際用戶ID和實際組ID進行訪問權限測試:

#include <unistd.h>
int access(const char *pathname, int mode);
int faccessat(int fd, const char *pathname, int mode, int flag);
/* 返回值:成功0,失敗-1*/

如果測試文件存在稻励,mode就為F_OK父阻,否則mode按下表位或:

mode 說明
R_OK 測試讀權限
W_OK 測試寫權限
X_OK 測試執(zhí)行權限

5.umask

umask為進程設置文件模式創(chuàng)建屏蔽字,并返回之前的值:

#include <sys/stat.h> 
mode_t umask(mode_t cmask);
/* 返回值:之前文件模式創(chuàng)建的屏蔽字*/

6.chmod望抽、fchmod和fchmodat

這三個函數(shù)用于改變現(xiàn)有文件的訪問權限:

#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
int fchmod(int fd, mode_t mode);
int fchmodat(int fd, const char *pathname, mode_t mode, int flag);
/* 返回值:成功返回0加矛,失敗返回-1 */

chmod函數(shù)在指定文件上進操作,而fchmod函數(shù)則在已打開文件進行操作煤篙,fchmodat中斟览,flag可以改變fchmodat的行為。

7.文件截斷

調(diào)用函數(shù)truncateftruncate可以截斷文件:

#include <unistd.h>
int truncate(const char *pathname, off_t length); int ftruncate(int fd, off_t length);
/* 返回值:成功0辑奈,失敗-1*/

將現(xiàn)有文件長度截斷為length苛茂,如果文件以前長于length則超過length部分不能訪問,若以前文件小于length則文件長度增加鸠窗,以前文件尾部和新的文件尾部直接產(chǎn)生空洞妓羊。

8.文件系統(tǒng)

首先介紹Unix文件系統(tǒng)的基本結構,我們可以把一個磁盤分為一個或多個分區(qū)稍计,每個分區(qū)可以包含一個文件系統(tǒng)躁绸。i節(jié)點是固定長度的記錄項,包含有關文件的大部分信息:

磁盤分區(qū)和文件系統(tǒng)

進一步i節(jié)點(索引節(jié)點)的結構:

索引節(jié)點和數(shù)據(jù)塊
  • 在圖中有兩個目錄項指向同一個i節(jié)點臣嚣,每個i節(jié)點有一個鏈接計數(shù)净刮,其值表示指向該i節(jié)點的目錄項數(shù),在stat結構中茧球,鏈接計數(shù)包含在st_nlink成員中庭瑰,這種鏈接稱為硬鏈接
  • 對應硬鏈接存在一種符號鏈接符號鏈接的實際內(nèi)容包含了該符號鏈接所指向的文件的名字抢埋。
  • i節(jié)點包含了文件有關的所有信息:文件類型弹灭、文件訪問權限位、文件長度和指向文件數(shù)據(jù)塊的指針等揪垄。

9.符號鏈接

符號鏈接是對一個文件的間接指針穷吮,與硬鏈接不同,硬鏈接直接指向文件的i節(jié)點饥努。引入符號鏈接的原因是避開硬鏈接的一些限制:

  • 硬鏈接通常要求鏈接和文件位于同一文件系統(tǒng)
  • 只有超級用戶才能創(chuàng)建指向目錄的硬鏈接

對于符號鏈接以及它指向何種對象并無任何文件系統(tǒng)限制捡鱼,任何用戶都可以創(chuàng)建指向目錄的符號鏈接。符號鏈接一般用于將一個文件或整個目錄結構移到系統(tǒng)中另一個位置酷愧。

當使用以名字引用文件的函數(shù)時驾诈,應當了解該函數(shù)是否處理符號鏈接缠诅。也就是該函數(shù)是否跟隨符號鏈接到達它所鏈接的文件。如果該函數(shù)具有處理符號鏈接的功能乍迄,則其路徑名參數(shù)引用由符號鏈接指向文件管引。否則,一個路徑名參數(shù)引用鏈接本身闯两,而不是由該鏈接指向的文件褥伴。

函數(shù) 是否跟隨符號鏈接
access y
chdir y
chmod y
chown y
creat y
exec y
lchown n
link y
lstat n
open y
opendir y
pathconf y
readlink n
remove n
rename n
stat y
truncate y
unlink n

小結

這節(jié)內(nèi)容真的很多,涉及到很多用戶權限問題漾狼,比較難消化重慢。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逊躁,隨后出現(xiàn)的幾起案子似踱,更是在濱河造成了極大的恐慌,老刑警劉巖志衣,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯援,死亡現(xiàn)場離奇詭異,居然都是意外死亡念脯,警方通過查閱死者的電腦和手機狞洋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绿店,“玉大人吉懊,你說我怎么就攤上這事〖傥穑” “怎么了借嗽?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長转培。 經(jīng)常有香客問我恶导,道長,這世上最難降的妖魔是什么浸须? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任惨寿,我火速辦了婚禮,結果婚禮上删窒,老公的妹妹穿的比我還像新娘裂垦。我一直安慰自己,他們只是感情好肌索,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布蕉拢。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕换。 梳的紋絲不亂的頭發(fā)上午乓,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音届巩,去河邊找鬼硅瞧。 笑死,一個胖子當著我的面吹牛恕汇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播或辖,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼瘾英,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颂暇?” 一聲冷哼從身側響起缺谴,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耳鸯,沒想到半個月后湿蛔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡县爬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年阳啥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片财喳。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡察迟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耳高,到底是詐尸還是另有隱情扎瓶,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布泌枪,位于F島的核電站概荷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碌燕。R本人自食惡果不足惜误证,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陆蟆。 院中可真熱鬧雷厂,春花似錦、人聲如沸叠殷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至像棘,卻和暖如春稽亏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缕题。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工截歉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烟零。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓呕乎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昵骤。 傳聞我的和親對象是個殘疾皇子涯捻,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容