本章的討論的中心是三個stat函式以及它們所返回的資訊。
#include
int stat(const char*pathname,struct stat*buf);
int fstat(int filedes,struct stat*buf);
int lstat(const char *pathname,struct stat*buf);
三個函式的返回:若成功為0,出錯為-1
給予乙個pathname,stat函式返回乙個與此命名檔案有關的資訊結構,fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊。 lstat函式類似於stat,但是當命名的檔案是乙個符號連線時,lstat返回該符號連線的有關資訊,而不是由該符號連線引用的檔案的資訊。(在 4.2)節中當降序周遊目錄層次結構時,我們需要lstat。在4.16節中的較詳細地說明符號連線。)
lstat函式不屬於posix10031-1990標準,但很可能加到10031a中。svr4和4.3+bsd支援lstat。
第二個引數是個指標,它指向乙個我們應提供的結構。這些函式填寫由buf指向的結構。該結構的實際定義可能所實施而有所不同,但其基本形式是:
struct stat;
posix.1未定義stdevstksige和stblocks欄位。svr4和4.3+bsd則定義了這些字段。注意,除最後兩個以外,其它各成員都? 為基本系統資料型別(見2.7節)。我們將說明此結構的每個成員以了解檔案屬性。
stat函式的最大使用者很可能是ls-l命令,用其可以獲得有關乙個檔案的所有資訊。
4.3檔案型別
至今我們已介紹了兩種不同的檔案型別-普通檔案和目錄。unix系統的大多數檔案是普通檔案或目錄,但是也有另外一些檔案型別:
1.普通檔案(regular file)。這是最常見的檔案型別,這種檔案包含了某種形式的資料。至於這種資料是文字還是二進位制資料對於系統核而言並無區別。對普通檔案內容的解釋由處理該檔案的應用程式進行。
2.目錄檔案(directory file)。這種檔案包含了其它檔案的名字以及指向與這些檔案有關資訊的指標。對乙個目錄檔案具有讀許可數的任一程序都可以讀該目錄的內容,但只有系統核可以寫目錄檔案。
3.字元特殊檔案(charocter special file)。這種檔案用於系統中的某些型別的裝置。
4.塊特殊檔案(block special file)。這種檔案典型地用於磁碟裝置。系統中的所有裝置或者是字元特殊檔案,或者是塊特殊檔案。
5.fifo。這種檔案用於程序間的通訊,有時也將其稱為命名管道。
6.套介面(socket)。這種檔案用於程序間的網路通訊。套介面也可用於在一台宿主機上的程序之間的非網路通訊。在第十五章,我們將用套介面進行程序間的通訊。只有4.3+bsd才返回套介面檔案型別,雖然 svr4支援用套介面進行程序間通訊,但現在是經由套介面函式庫實現的,而不是通過系統核內的套介面檔案型別,將來的svr4版本可能會支援套介面檔案型別。
7.符號連線(symboliclink)。這種檔案指向另乙個檔案。
檔案型別資訊,包含在stat結構的stode成員中。
例項#include
#include
#include
int main( int argc, char *argv )
if ( s_isreg(buf.st_mode) )
else if ( s_isdir(buf.st_mode) )
else if ( s_ischr(buf.st_mode) )
else if ( s_isblk(buf.st_mode) )
else if ( s_isfifo(buf.st_mode) )
else if ( s_islnk(buf.st_mode) )
else if ( s_issock(buf.st_mode) )
else
printf( "%s/n", msg );
}exit (0);
}程式4.1取其命令列引數,然後針對每乙個命令列引數列印其檔案型別。
程式4.1對每個命令列引數列印檔案型別
程式4.1的樣本輸出是:
$ ./a.out /etc /etc/profile /dev/tty0 /dev/sda1 /dev/cdrom /dev/log
/etc: directory
/etc/profile: regular
/dev/tty0: character special
/dev/sda1: block special
/dev/cdrom: symbolic link
/dev/log: socket
stat,fstat以及lstat函式
stat,fstat以及lstat函式 本章的討論的中心是三個stat函式以及它們所返回的資訊。include int stat const char pathname,struct stat buf int fstat int filedes,struct stat buf int lstat c...
stat,fstat以及lstat函式
include int stat const char pathname,struct stat buf int fstat int filedes,struct stat buf int lstat const char pathname,struct stat buf 三個函式的返回 若成功為0...
什麼是網域名稱以及WSGI 以及URL 以及web
www.baidu.com baidu.com是網域名稱.com是網域名稱字尾.還有.cn org edu gov net等 url 統一資源定位符,也就是 www是worldwide wide web的意思 也叫全球資訊網,或web,是乙個由許多文字鏈結組成的超文字系統,通過internet訪問,...