學習筆記
20191318 王澤文
《Unix/Linux系統程式設計》
第七章 檔案操作
本章主要講述讨論了多種檔案系統;解釋了作業系統中的各種操作級别,系統性概述了各種操作,介紹了Linux系統的EXT2檔案系統。
檔案操作級别包括:
- 硬體級别
- 作業系統核心中的檔案系統函數
- 系統調用
- 檔案流上的I/O庫函數
- 使用者指令
- 各種操作的sh腳本
在低級别的檔案操作中,主要學習了分區和格式化分區。分區指的是一個塊儲存設備, 如硬碟、U盤、SD卡等,可以分為幾個邏輯單元。學習了磁盤分區、顯示分區表的程式、檔案系統的格式化分區以及挂載磁盤分區;
接着,還了解了EXT2檔案系統,包括EXT2檔案系統的系統資料結構、顯示超級塊、組描述符、塊和索引節點位圖以及目錄内容的程式
第八章 使用系統調用進行檔案操作
本章主要講述如何使用系統調用進行檔案操作。
系統調用是一種允許程序進入Kmode(核心模式)以執行Umode(使用者模式)不允許操作的機制。複刻子程序、修改執行映像,甚至是終止等操作都必須在核心中執行。
系統調用手冊頁,使用
man 2 NAME
可以用來顯示系統調用手冊頁。
-
檢查對某個檔案的權限access : int access(char *pathname,int mode);
-
更改目錄chdir : int chdir(const char *path);
-
更改某個檔案的權限chmod:int chmod{char *path, mode_t mode);
-
更改檔案所有人chown : int chown(char *name, int uid, int gid);
-
将(邏輯)根目錄更改為路徑名chroot: int chroot(char *pathname);
-
擷取 CWD 的絕對路徑名getcwd: char *getcwd(char *buf, int size);
-
建立目錄mkdir: int mkdir(char *pathname, mode_t mode)
-
移除目錄(必須為空)rmdir: int rmdir(char *pathname);
-
将新檔案名硬連結到舊檔案名link: int link(char *oldpath, char *newpath);
-
減少檔案的連結數;如呆連結數達到 0, 則删除檔案unlink: int unlink(char *pathname);
-
為檔案建立一個符号連結symlink: int sym1ink(char *o1dpath, char *newpath);
-
更改檔案名稱rename: int rename(char *o1dpath, char *newpath);
-
更改檔案的訪間和修改時間utime: int utime(char *pathname, struct utimebuf *time)
-
将檔案系統添加到挂載點目錄上mount: int mount(char *specialfile, char •mountDir);
-
分離挂載的檔案系統urnount: int umount(char *dir);
-
建立特殊檔案mknod: int mknod(char *path, int mode, int device);
stat
: 擷取檔案狀态資訊
open
: 打開一個檔案進行讀、寫、追加
close
: 關閉打開的檔案描述符
read
: 讀取打開的檔案描述符
write
: 寫入打開的檔案描述符
lseek
: 重新定位檔案描述符的讀/寫偏移量
dup
: 将檔案描述符複制到可用的最小描述符編号中
dup2
: 将oldfd複制到newfd中,如果newfd己打開,先将其關閉
link
: 将新檔案硬連結到舊檔案
unlink
: 取消某個檔案的連結;如果檔案連結數為0,則删除檔案int unlink(char *pathname)
symlink
: 建立一個符号連結
readlink
: 讀取符号連結檔案的内容
umask
: 設定檔案建立掩碼;檔案權限為(mask& -umask)