天天看點

Unix/Linux系統程式設計第八章學習筆記

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程式

内容:建立多個目錄

過程:

Unix/Linux系統程式設計第八章學習筆記

檔案描述符的作用是什麼?

對檔案描述符的了解

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