原创 4.3 文件類型

  至此我們已經介紹了兩種不同的文件類型:普通文件和目錄。UNIX系統的大多數文件時普通文件或目錄,但是也有另外一些文件類型。文件類型包括如下幾種。    (1)普通文件(regular file)。這是最常用的文件類型,這種文件包含了某

原创 4.5 文件訪問權限

    st_mode值也包含了對文件的訪問權限。當提及文件時,指的是前面所提到的任何類型的文件。所有文件類型(目錄、字符特別文件等)都有訪問權限(access permission)。很多人認爲只有普通文件有訪問權限,這是一種誤解。 

原创 4.7 函數accesss和faccessat

   正如前面所說,當用open函數打開一個文件時,內核以進程鵝有效用戶ID和有效組ID爲基礎執行其訪問權限測試。有時,進程也希望按其實際用戶ID和實際組ID來測試其訪問能力。例如,當一個進程使用設置用戶ID或設置組ID功能作爲另一個用戶

原创 4.4 設置用戶ID和設置組ID

與一個進程相關聯的ID有6個活更多,如圖4-5所示。實際用戶ID            我們實際上是誰        實際組  ID有效用戶ID有效組ID                用於文件訪問權限檢查附屬組ID           

原创 第3章 文件I/O

3.16 /dev/fd    較新的系統都提供名爲/dev/fd的目錄,其目錄項是名爲0、1、2等的文件。打開文件/dev/fd等效於複製描述符n。    在下列函數調用中:    fd = open("/dev/fd/0", mode

原创 4.8 函數umask

   至此我們已說明了與每個文件相關聯的9個訪問權限位,在此基礎上我們可以說明與每個進程相關聯的文件模式創建屏蔽字。    umask函數爲進程設置文件模式創建屏蔽字,並返回之前的值。(這是少數幾個沒有出錯返回函數中的一個。)#inclu

原创 4.2 函數stat、fstat、fstatat和lstat

   本章主要討論4個stat函數以及它們的返回信息。#include <sys/stat.h>int stat(const char *restrict pathname, struct stat * restrict buf);int

原创 第3章

3.15 函數ioctl    ioctl函數一直是I/O操作的雜物箱。不能用本章中其他函數表示的I/O操作通常都能用ioctl表示。終端I/O是使用ioctl最多的地方。#include <unistd.h>#include <sys/

原创 第3章 文件I/O

3.7 函數read   調用read函數從打開文件中讀數據。#include <unistd.h>ssize_t read(int fd, void *buf, size_t nbytes);                      

原创 第3章 文件I/O

3.13 函數sync、fsync和fdatasync   傳統的UNIX系統實現在內核中設有緩衝區高速緩存或頁高速緩存,大多數磁盤I/O都通過緩衝區進行。當我們向文件寫入數據時,內核通常先將數據複製到緩衝區中,然後排入隊列,晚些時候再寫

原创 4.6 新文件和目錄的所有權

     在第3章中講述用open或creat創建新文件時,我們並沒有說明賦予新文件的用戶ID和組ID是什麼。4.21節將說明mkdir函數,此時就會了解如何創建一個新目錄。關於新目錄的所有權規則與本節說明的新文件所有權規則相同。   

原创 4.1 引言

   上一章我們說明了執行I/O操作的基本函數,其中的討論是圍繞普通文件I/O進行的---打開文件、讀文件或寫文件。本章將描述文件系統的其他特徵和文件的性質。我們將從stat函數開始,逐個說明stat結構的每一個成員以瞭解文件的所有屬性。

原创 5.1 引言

    本章講述標準I/O庫。不僅是UNIX,很多其他操作系統都實現了標準I/O庫,所以這個庫由ISO C標準說明。Single UNIX Specification 對ISO C標準進行了擴充,定義了另外一些接口。    標準I/O庫處

原创 5.2 流和FILE對象

    在第3章中,所有I/O函數都是圍繞文件描述符的。當打開一個文件時,即返回一個文件描述符,然後該文件描述符就用於後續的I/O操作。而對於標準I/O庫,它們的操作時圍繞流(stream)進行的(請勿將標準I/O術語與System V的

原创 4.18 創建和讀取符號鏈接

    可以用symlink或symlinkat函數創建一個符號鏈接。#include <unstd.h>int symlink(const char * actualpath, const char * sympath);int sym