下面介紹對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.使用鏈...