檔案和目錄 UNIX環境高階程式設計 第4章

2021-06-26 02:25:33 字數 4292 閱讀 3768

4.2 stat、fstat和lstat函式

int stat(const char *restrict pathname, struct stat *restrict buf);

int fstat(int filedes, struct stat *buf);

int lstat (const char *restrict pathname, struct stat *restrict buf);//返回值:成功0,失敗-1

4.3 檔案型別

普通檔案、目錄檔案、塊特殊檔案、字元特殊檔案、fifo、套接字、符號鏈結

塊裝置檔案提供裝置帶緩衝的訪問,字元特殊檔案提供對裝置不帶緩衝的訪問,系統中的所有裝置要不是塊裝置檔案,要不是字元特殊檔案。

4.5檔案訪問許可權

為了刪除乙個檔案,不許對該檔案的目錄有寫許可權和執行許可權,對該檔案則不需要有讀寫許可權。

4.7access函式

int access(const char *pathname, int mode);返回值:成功返回0,出錯-1

4.8 umask函式

mode_t umask(mode_t cmask);返回值:以前的檔案模式建立遮蔽字

4.9 chmod、fchmod函式

int chmod(const char *pathname, mode_t mode);

int fchmod(int filedes, mode_t mode);返回值:成功0,出錯-1

chmod對指定的檔案進行操作,而fchmod則對於已經開啟的檔案進行操作

4.11 chown、fchown和lchown函式用於更改檔案的使用者id和組id

int chown(const char *path, uid_t owner, gid_t group);

int fchown(int filedes, uid_t owner, gid_t group);

int lchown(const char *pahtname, uid_t owner, gid_t group);返回值:成功0,出錯-1

4.13 檔案截短

int truncate(const char *paht, off_t length);

int ftruncate(int filedes, off_t length);返回值:成功0,出錯-1

它們把現有檔案長度截短為length,如果檔案大於length,則length以後的檔案不能再訪問,如果以前的檔案長度小於length,則其效果與系統有關

4.14 檔案系統

乙個磁碟可以分成乙個或多個磁碟,每個磁碟可以包含乙個分割槽

4.15 link、unlink、remobe和rename函式

int link(const char *existingpath, const char *newpath);

int unlink(const char *pathname);

int remove(const char *pathname);

int rename(const char *oldname, const char *newname);返回值:成功0,出錯-1

任何乙個檔案可有多個目錄項指向其i節點,當有程序開啟乙個檔案時,該檔案不能刪除,關閉乙個檔案時,核心首先檢查開啟該檔案的程序數,如果該數為0,則檢查其連線數如果也為0,則刪除該檔案內容。

給出符號名鏈結的情況下,沒有乙個函式能夠通過刪除由該鏈結所引用的檔案。

4.16 符號鏈結

>>>>>>>>>>----------硬鏈結和軟連線的分析-------------------<<<<<<<<<<<<<<<<<<<<

linux下的檔案是通過索引節點(inode)來識別檔案,硬鏈結是乙個指向索引節點的指標,系統並不為它分配inode,每新增乙個硬鏈結,檔案連線數就加1

可以用ln來建立硬鏈結,用ln -s 建立軟連線

(1)不可以在不同檔案系統的檔案間建立鏈結(2)只有超級使用者才可以為目錄建立硬鏈結

軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、

不同網路對檔案進行鏈結。總之,建立乙個軟連線就是建立了乙個新檔案,當訪問這個鏈結檔案時,他讀取鏈結檔案找到真正要訪問的檔案。

缺點:軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是不同的。區別:硬鏈結原檔案&鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案&鏈結檔案

擁有不同的inode號,表明他們是兩個不同的檔案;在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;鏈

接數目是不一樣的,軟鏈結的鏈結數目不會增加;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的

因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼

移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑

4.17 symlink和readlink函式

int symlink(const char *actualpath, const char *sympath);返回值:成功0,出錯-1

ssize_t readlink(const char *restrict pathname, char *restrict buf, size_t bufsize);返回值:成功返回讀到的位元組數,出錯返回-1

symlink建立乙個指向actualpath的新目錄項sympath,在建立此符號鏈結時,並不要求actualpath已經存在,並且二者並不需要位於同乙個檔案系統中。建立的是軟連線。

4.18 檔案的時間

4.19 utime函式修改檔案的訪問和修改時間

int utime(const char *pathname, const struct utimebuf *times);返回值:成功0,出錯-1

此函式所使用的資料結構:

struct utime

4.20 mkdir和rmdir

int mkdir(const char *pathname, mode_t mode);

int rmdir(cosnt char *pathname); 返回值:成功0,出錯-1

4.21 讀目錄

對某個目錄具有訪問許可權的任乙個使用者都可以讀該目錄,但是,為了防止檔案系統產生換亂,只有核心才能寫目錄。乙個目錄的寫和執行許可權決定該目錄中能否穿件新檔案以及刪除檔案,他們並不表示能寫目錄檔案。

4.24 chdir、fchdir和getcwd函式

每個程序都有乙個當期工作目錄,此目錄是搜尋所有相對路徑名的起點(不已斜槓開始的路徑名為相對路徑名)

int chidr(cosnt char *pathname);

int fchdir(int filedes);返回值;成功0,出錯-1

char *getcwd(char *buf, size_t seze);返回值:成功1,出錯null

核心為每個程序只儲存指向該目錄v節點的指標等目錄本身的資訊,並不儲存完整路徑名。

4.23 裝置特殊檔案

4.24 檔案訪問許可權位

《unix高階環境程式設計》檔案和目錄 目錄操作

目錄的基本操作包括開啟目錄opendir 讀取目錄readdir 關閉目錄closedir等操作,如下說明 cpp view plain copy 目錄操作 1 開啟目錄opendir 函式功能 開啟乙個目錄 返回值 若成功返回乙個目錄指標,若出錯則返回null指標 函式原型 include inc...

《unix高階環境程式設計》檔案和目錄 檔案時間

cpp view plain copy 檔案時間 st atime 最後訪問時間,即最後訪問檔案的時間 st mtime 最後修改時間,即修改檔案內容的時間 st ctime 最後更改時間,即更改inode節點的時間 utime函式 函式功能 更改檔案訪問時間和檔案修改時間 返回值 若成功則返回0,...

UNIX環境高階程式設計複習 檔案和目錄(1)

includeint stat const char restrict pathname,struct stat restruct buf int fstat int filedes,struct stat buf int lstat const char pathname,struct sat r...