unix檔案型別主要包含如下幾種:
1.普通檔案(regular file)
2.目錄檔案(directory file)
3.塊特殊檔案(block special file),這種檔案提供對裝置(例如硬碟)帶緩衝的訪問,每次訪問以固定長度為單位進行。
4.字元特殊檔案(character special file),這種檔案提供對裝置不帶緩衝的訪問,每次訪問長度可變。
5.fifo檔案,命名管道(named pipe),用於程序間通訊。
6.socket檔案,用於程序間的網路通訊,也可以在同一臺機器上進行程序間通訊。
7.符號鏈結檔案(symbolic link),指向另外乙個檔案。
檔案型別資訊存放在stat結構體的st_mode成員中。stat結構體的宣告如下:
[cpp]view plain
copy
struct
stat ;
可以使用下面的巨集確定檔案的型別,巨集的引數都是結構體stat的成員st_mode.
posix.1實現允許將程序間通訊(ipc)物件表示為檔案,下面的巨集確定可用來確定ipc物件的型別。
上述巨集的引數是結構體stat。
那麼如何才能獲取stat結構體呢,使用下面三個函式:
[cpp]view plain
copy
#include
intstat(
const
char
* restrict pathname,
struct
stat* restrict buf);
intfstat(
intfiledes,
struct
stat *buf);
intlstat(
const
char
* restrict pathname,
struct
stat* restrict buf );
//三個函式如果成功則返回0,出錯返回-1.
lstat類似於stat,但是當檔案時乙個符號鏈結時,lstat獲取的是該符號鏈結的有關資訊,而不是該符號鏈結引用的
檔案的資訊。
實踐:[cpp]view plain
copy
#include
#include
intmain(
intargc,
char
* argv)
if(stat(argv[1],&buf)
if(s_isreg(buf.st_mode))else
if(s_isdir(buf.st_mode))else
if(s_isblk(buf.st_mode))else
if(s_islnk(buf.st_mode))
return
0;
}
執行結果:
yan@yan-vm:~/apue$ ll /etc/init.d/acpid
lrwxrwxrwx 1 root root 21 apr 12 20:33 /etc/init.d/acpid -> /lib/init/upstart-job*
yan@yan-vm:~/apue$ ./a.out /etc/init.d/acpid
regular.
如果將stat修改為lstat,結果如下:
yan@yan-vm:~/apue$ ll /etc/init.d/acpid
lrwxrwxrwx 1 root root 21 apr 12 20:33 /etc/init.d/acpid -> /lib/init/upstart-job*
yan@yan-vm:~/apue$ ./a.out /etc/init.d/acpid
symbolic link.
unix環境高階程式設計 4 18 檔案時間
在unix系統中,每個檔案要保持三個時間字段,他們的意義分別如下 字段說明 例子ls選項 st atime st mtime st time 檔案資料的最後訪問時間 檔案按資料的最後修改時間 i節點狀體的最後更改時間 read write chmo,chown u預設 c注意st mtime 指的是...
Unix環境高階程式設計學習筆記(二) 檔案IO
談linux下的檔案操作,我們首先需要了解程序表,這是被每個程序所維護的一張開啟檔案的對映表,參照下圖。索引值是檔案描述符,與之相關聯的節點包含fd flag以及乙個指向file table的指標。其中fd flag主要包含close on exec標記,該標記的作用在於當開闢其他程序呼叫exec ...
unix環境高階程式設計 4 3 檔案型別
我們都知道在unix系統中,檔案分為兩種 普通檔案和目錄。unix大多數都是這些檔案型別。但是也有另外一種。下面簡單介紹一下檔案型別 1 普通檔案。最常見的檔案型別。2 目錄檔案。這種檔案包含了其他檔案的名字以及指向與這些檔案有關的資訊指標。對乙個目錄檔案具有讀許可權的任一程序都可以讀該目錄的內容,...