Unix/Linux系統程式設計第八章學習筆記
作者:20191322wyl
目錄
-
- 知識點總結
- 系統調用手冊
- 使用系統調用進行檔案操作
- 連結檔案
- 硬連結檔案
- 符号連結檔案
- stat系統調用
- 實踐
- 問題與解決
- 問題
- 解決
- 知識點總結
Unix以及大多數版本的Linux中,線上手冊頁儲存在/usr/man/目錄中。man2子目錄中列出了所有系統調用手冊頁。sh指令man2 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);
getewd:擷取CWD的絕對路徑名
char *getcwd(char *buf, int aize);
mkdir:建立目錄
tnt mkdir(char *pathname,mode_t mode);
rmdir:移除目錄(必須為空)
int rmdir(char *pathname);
link:将新檔案名硬連結到舊檔案名
tnt 1ink(char *o1dpath,char *newpath);
umlink:減少檔案的連結數;如果連結數達到0,則删除檔案
int unlink(char *pathname);
symlink:為檔案建立一個符号連結
int symlink(char *o1dpath, char*newpath);
rename:更改檔案名稱
int rename (char *oldpath, char *newpath);
utime:更改檔案的通路和修改時間
int utime(char *pathname, struct utimebuf *time)
以下系統調用需要超級使用者權限
mount: 将檔案系統添加到挂載點目錄上
int mount(char *specialfile, char *mountDir);
umount: 分離挂載的檔案系統
int umount(char *dix);
mknod: 建立特殊檔案
int mknod(char *path,int mode, int device);
常用的系統調用:
stat: 擷取檔案狀态資訊
int stat(char *filename,struct stat *buf)
int fstat(int filedes,struct stat *buf)
int lstat(char *filename,struct stat *buf)
open:打開一個檔案進行讀、寫、追加
int open(char *file, int flags,int mode)
close:關閉打開的檔案描述符
int close(int fd)
read:讀取打開的檔案描述符
int read(int fd, char buf[], int count)
write:寫入打開的檔案描述符
int write(int fd, char buf[ ], int count)
lseek:重新定位檔案描述符的讀/寫偏移量
int 1seek(int fd, int offset, int whence)
dup:将檔案描述符複制到可用的最小描述符編号中
int dup(int oldfd);
dup2:将oldfd複制到newfd中,如果newfd已打開,先将其關閉
int dup2(int oldfd, int newfd)
link:将新檔案硬連結到舊檔案
int link(char *oldPath, char *newPath)
unlink:取消某個檔案的連結;如果檔案連結數為0,則删除檔案
int unlink(char *pathname);
symlink:建立一個符号連結
int symlink(char *target, char *newpath)
readlink:讀取符号連結檔案的内容
int readlink(char *path, char *buf, int bufsize)
umask:設定檔案建立掩碼;檔案權限為(mask&~umask)
int umask(int umask) ;
硬連結:指令
ln oldpath newpath
建立從newpath到oldpath的硬連結。對應的系統調用為:
link(char *oldpath,char *newpath)
硬連結檔案會共享檔案系統中相同的檔案表示資料結構。檔案連結會記錄連結到同一索引結點的硬連接配接數量。硬連結僅适用于非目錄檔案。否則,可能會在檔案系統名稱中建立循環。相反,系統調用:
unlink(char *pathname
)
會減少檔案的連結數。如果連結變為0,檔案就被完全删除。
軟連結:指令
ln -s oldpath newpath #in command with the -s flag
建立從newpath到oldpath的軟連結或符号連結。對應的系統調用是:
symlink(char *oldpath,chat *newpath)
newpath是LNK類型的普通檔案,包含oldpath字元串。它可作為一個繞行标志,使通路指向連結好的目标檔案。與硬連結不同,軟連結适用于任何檔案,包括目錄。
- stat檔案狀态
- stat結構體
- stat與檔案索引節點
- 檔案類型和權限
- opendir-readdir函數
- readlink函數
- ls程式
内容:建立多個目錄
過程:

檔案描述符的作用是什麼?
對檔案描述符的了解
在linux下一切皆檔案,檔案描述符是核心為了高效的管理已經被打開的檔案所建立的索引,它是一個非負整數,用于指代被打開的檔案,所有執行I/O操作的系統調用都是通過檔案描述符完成的。