讀書筆記-第四章

4.2stat、fstat和lstat函數

  • #include <sys/stat.h>
    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

  • 一旦給pathname,stat函數就返回與此命名文件有關的信息結構。fstat函數獲取已在描述符filedes上打開文件的有關信息。lstat函數類似於stat,但是當命名文件是一個符號鏈接時,lstat返回該符號鏈接的有關信息,而不是該符號鏈接引用文件的信息
  • struct stat {
    mode_t    st_mode;             /* file type & mode (permissions) */
    ino_t     st_ino;
    dev_t     st_dev;
    dev_t     st_rdev;
    nlink_t   st_nlink;
    uid_t     st_uid;
    gid_t     st_gid;
    off_t     st_size;
    time_t    st_atime;
    time_t    st_mtime;
    time_t    st_ctime;
    blksize_t st_blksize;
    blkcnt_t  st_blocks;
    };

4.3文件類型

  • 文件類型包括以下幾種:
  1. 普通文件。
  2. 目錄文件。這種文件包含了其他文件的名字以及指向這些文件有關信息的指針。
  3. 塊特殊文件。這種文件類型提供對設備(例如磁盤)帶緩衝的訪問,每次訪問以固定長度爲單位進行。
  4. 字符特殊文件。這種文件類型提供對這杯不帶緩衝的訪問,每次訪問長度可變。
  5. FIFO。用於進程間通信。
  6. 套接字。用於進程間的網絡通信。
  7. 符號鏈接。
  • 文件的類型信息包含在stat結構的st_mode成員中。可以用表4-1中的宏確定文件類型。這些宏的參數都是stat結構中的st_mode成員。
    表4-1中的文件類型宏
    文件類型
    S_ISREG() 普通文件
    S_ISDIR() 目錄文件
    S_ISCHR() 字符特殊文件
    S_ISBLK() 塊特殊文件
    S_ISFIFO() 管道或FIFO
    S_ISLNK() 符號鏈接
    S_ISSOCK() 套接字
  • 表4-2中的宏可用來確定IPC對象的類型,這些宏的參數並非st_mode,而是指向stat結構的指針
    表4-2中的IPC類型宏
    對象類型
    S_TYPEISMQ() 消息隊列
    S_TYPEISSEM() 信號量
    S_TYPEISSHM() 共享存儲對象

4.4設置用戶ID和設置組ID

  • 與一個進程相關的ID有6個或更多,他們示於表4-4中
    表4-4與每個進程相關的用戶ID和組ID
    實際用戶ID                  我們實際上是誰
    實際組ID
    有效用戶ID                  用於文件訪問權限檢查
    有效組ID
    附加組ID
    保存的設置用戶ID      由exec函數保存
    保存的設置組ID
  • 每個文件都有一個所有者和組所有者,所有者由stat結構中的st_uid成員表示,組所有者則有st_gid成員表示。
  • 在文件模式字(st_mode)中設置一個特殊標誌,其含義是“當執行此文件時,將進程的有效用戶ID設置爲文件所有者的用戶ID(st_uid)”。與此類似,在文件模式字中可以設置另一位,它使得將執行此文件的進程的有效組ID設置爲文件的組所有者ID(st_gid)。在文件模式字中的這兩位被稱爲設置用戶ID(set-usr-ID)位和設置組ID(set-group-ID)位。這兩位可用常量S_ISUID和S_ISGID測試

4.5文件訪問權限

  • 表4-5 9個訪問權限位,取自
    st_mode屏蔽 意義
    S_IRUSR
    S_IWUSR
    S_IXUSR
    用戶-讀
    用戶-寫
    用戶-執行
    S_IRGRP
    S_IWGRP
    S_IXGRP
    組-讀
    組-寫
    組-執行
    S_IROTH
    S_IWOTH
    S_IXOTH
    其他-讀
    其他-寫
    其他-執行
  • 對於目錄的讀權限和執行權限的意義是不相同的。讀權限允許我們讀目錄,獲得在該目錄中所有文件名的列表。當一個目錄是我們要訪問文件的路徑名的一個組成部分時,對該目錄的執行權限是我們可以通過該目錄(也就是搜索該目錄,尋找一個特定的文件名)。

4.6新文件和目錄的所有權

  • 新目錄的所有全和新文件的所有權規則相同。
  • 新文件的用戶ID設置爲進程有效用戶ID。關於組ID,POSIX.1允許實現選擇下列之一作爲新文件的組ID。
  1. 新文件的組ID可以是進程的有效組ID。
  2. 新文件的組ID可以是它所在目錄的組ID。(在linux中如設置了set-group-ID位時,使用第二步)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章