《APUE》第四章筆記(2)

2021-06-28 10:58:43 字數 2645 閱讀 1758

下面介紹對stat結構的各個成員的操作函式。

先貼個stat結構的圖:

access函式:

#include

int access(const char *pathname, int mode);

其中,mode是表中的按位或。

返回值:若成功返回0,若出錯返回-1

當程序對乙個檔案進行某種操作(讀或寫或執行)時,核心會以程序的有效使用者id和有效組id為基礎執行其訪問許可權測試。有時,程序也希望按其實際使用者id和實際組id來測試其訪問能力。例如當乙個程序有使用設定使用者id或設定組id時(通常此時有效使用者id並不等於實際使用者id),就可能會有這種需要。access函式是按實際使用者id和實際組id來進行訪問許可權測試的。

該測試分為四步:

1.先看是不是超級使用者,是的話就允許訪問,不用看接下來的3步了。

2.若程序的實際使用者等於檔案的所有者id(也就是程序擁有該檔案),那麼就會按設定好的訪問許可權來訪問。

3.如果不符合2的話,那就看組,看是不是組的所有者。

4.都不是的話那就依照other的訪問許可權來訪問了。

總接下來就是先看是否超級使用者,再分別看user,group和other的訪問許可權。

umask函式:

#include

mode_t umask(mode_t cmask);

返回值:以前的檔案模式建立遮蔽字

umask函式為程序設定檔案模式建立遮蔽字,並返回以前的值。

在使用open和creat函式來建立乙個新檔案時,這兩個函式都有乙個引數mode,它指定了新檔案的訪問許可權位。用umask可以遮蔽掉相應的許可權。下面給個例子:

首先umask(0)代表什麼都不遮蔽。然後建立foo檔案的許可權是rw-rw-rw-。然後遮蔽掉組的讀(s_irgrp)和組的寫(s_iwgrp)和其他的讀(s_iroth)和寫(s_iwoth)。然後當建立bar檔案的時候,雖然指定了rw-rw-rw的許可權,但是由於組的讀寫和其他的都寫許可權都被遮蔽掉了,所以不能顯示。結果如下:

除了向上述那樣用巨集來指定遮蔽字以外,還可以用向對應的數字。

chmod和fchmod函式:

#include

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

int fchmod(int fiedes, mode_t mode);

兩個函式返回值:若成功返回0,出錯返回-1

這兩個函式使我們可以更改現有檔案的訪問許可權。chmod函式在指定的檔案上進行操作,而fchmod函式則對已開啟的檔案進行操作。

為了改變乙個檔案的許可權位,程序的有效使用者id必須等於檔案的所有者id,或者該程序必須具有超級用具許可權。

引數mode是下圖所示常量的或運算構成的。

chown,fchown和lchown函式:

下面的幾個函式可用於更改檔案的使用者id和組id。

#include

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

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

int lchown(const char *pathname, uid_t owner, gid_t group);

三個函式的返回值:成功返回0,出錯返回-1

如果在符號鏈結的情況下,lchown更改的是鏈結本身的所有者,而不是符號鏈結所指向的檔案。

如果兩個引數owner或者group中的任意乙個是-1,則對應的id不變。

在linux下,能改的檔案只有超級使用者和程序的有效id等於檔案的所有者。

檔案長度:

stat結構成員st_size表示以位元組為單位的檔案長度。此字段只對普通檔案、目錄檔案和符號鏈結有意義。

對於符號鏈結,檔案長度是檔名中的實際位元組數。(不包括'\0')

檔案截短:

有兩個函式可以實現。

#include

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

int ftruncate(int filedes, off_t length);

兩個函式的返回值:成功返回0,出錯返回-1

第四篇筆記待續。

APUE第四章 答案

4.1 stat函式順著符號鏈結向前,如果符號鏈結指向的檔案不存在,那麼stat返回出錯。4.2 關閉了該檔案的所有訪問許可權。4.3 如下命令,開啟會提示許可權不足 chmod u r filename vim filename4.4 用open或者creat建立已經存在的檔案,檔案的許可權不變,...

APUE筆記 第四章 檔案和目錄

功能 給定乙個pathname,stat函式返回乙個與此命名檔案有關的資訊結構,fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊。lstat函式類似於stat,但是當命名的檔案是乙個符號連線時,lstat返回該符號連線的有關資訊,而不是由該符號連線引用的檔案的資訊。1 普通檔案 re...

第四章筆記

一.引入樣式 1.行內樣式表 2.內部樣式表 在head標籤裡面,title標籤下面 優點方便在同頁面中修改樣式 缺點不利於在多頁面間共享復用 及維護,對內容與樣式的分離也不夠徹底 3.外部樣式表 嵌入式匯入式 嵌入式和匯入式的區別 1.標籤屬於xhtml,import是屬於css2.1 2.使用鏈...