一、fstat 函式
功能:由檔案描述符取得檔案狀態。
標頭檔案:
#include
#include
函式宣告: int fstat (int filedes,struct *buf);
描述: fstat()用來將引數filedes 所指向的檔案狀態複製到引數buf 所指向的結構中(struct stat)。fstat()與stat()作用完全相同,不同之處在於傳入的引數為已開啟的檔案描述符。
返回值:執行成功返回0,失敗返回-1,錯誤**儲存在errno。
下面舉乙個小例子:
------------------------------
#include
#include
#include
#include
#include
main()
------------------------------
執行結果:
/etc/passwd file size = 1656
也許,你看到這裡會產生和我一樣的疑惑:這個struct stat 結構到底是什麼樣的呢?
下面我就來詳細的介紹一下它了哦~~~
二、struct stat結構體
定義如下:
struct stat ;st_dev 字段描述該檔案所在的裝置。(major() 和minor()巨集可能在分析這個裝置id域時有用。)
st_rdev 字段描述這個檔案(inode)本身代表的裝置。
st_size 字段給出檔案位元組尺寸(如果它是乙個普通檔案或符號鏈結)。對於符號鏈結而言是它所有包含路徑名長度,不包括結尾的空字元。
st_blocks 字段指明檔案已經分配資料塊的個數,資料塊以 512 位元組為單位。(這可能小於 st_size/512,當檔案有空洞時。)
st_blksize 給出對於高效檔案系統 i/o 操作的優先塊尺寸。(資料以小尺寸塊寫入檔案時可能導致低效的 讀-更改-覆蓋 操作。)
不是所有的 linux 檔案系統實現了所有的時間域。一些檔案系統允許掛載時不去訪問檔案或目錄且不會導致st_atime 字段更新。(參考 mount() 的 noatime、nodiratime 和 relatime,以及mount() 中相關的資訊。)此外,如果檔案以 o_noatime 標誌開啟,st_atime 不會被更新。
st_atime 欄位在檔案訪問時更改,比如,execve()、mknod()、pipe()、utime() 和read()(多於零個位元組)。
域 st_mtime 在檔案更改時更新,比如,mknod()、truncate()、utime() 和 write()(多於零個位元組)。再者,乙個目錄的 st_mtime 在這個目錄裡建立或刪除檔案時更新。st_mtime 在更改所有者、組、硬鏈結個數或許可權模式時 不會 更新。
st_ctime 欄位在寫入或設定結點(inode)資訊(如所有者、組、鏈結數、許可權等等)時會更改。
下面 posix 巨集用於使用 st_mode 字段測試檔案型別:
s_isreg(m)
它是普通檔案嗎?
s_isdir(m)
目錄嗎?
s_ischr(m)
字元裝置?
s_isblk(m)
塊裝置?
s_isfifo(m)
fifo(命名管道)?
s_islnk(m)
符號鏈結?(不在 posix.1-1996。)
s_issock(m)
套介面?(不在 posix.1-1996。)
下面標誌為 st_mode 域定義:
s_ifmt
0170000
檔案型別位域掩碼
s_ifsock
0140000
套介面s_iflnk
0120000
符號鏈結
s_ifreg
0100000
普通檔案
s_ifblk
0060000
塊裝置s_ifdir
0040000
目錄s_ifchr
0020000
字元裝置
s_ififo
0010000
fifo
s_isuid
0004000
設定 uid 位
s_isgid
0002000
設定 組id 位 (看下面)
s_isvtx
0001000
粘滯位(看下面)
s_irwxu
00700
檔案所有者許可權掩碼
s_irusr
00400
所有者有讀許可權
s_iwusr
00200
所有者有寫許可權
s_ixusr
00100
所有者有執行許可權
s_irwxg
00070
組許可權掩碼
s_irgrp
00040
組有讀許可權
s_iwgrp
00020
組有寫許可權
s_ixgrp
00010
組有執行許可權
s_irwxo
00007
其他使用者許可權掩碼(不在組內)
s_iroth
00004
其他有讀許可權
s_iwoth
00002
其他有寫許可權
s_ixoth
00001
其他有執行許可權
設定組id位s_isgid)有多個特殊用處。對於乙個目錄而言,它指明 bsd 語義應用到這個目錄;建立的檔案繼承其父目錄的組id,而不是來自建立程序的有效組id,並且建立的目錄同時也會獲得s_sigid位設定。對於乙個沒有組執行許可權位(s_ixgrp)檔案而言,設定組id位用於指明託管檔案/記錄鎖。
在目錄上的粘滯位(s_isvtx)表示目錄裡的檔案只有其所有者,目錄所有者,和特權程序,可以對其進行重新命名或刪除。
fstat函式詳解
stat系統呼叫系列包括了fstat stat和lstat,它們都是用來返回 相關檔案狀態資訊 的,三者的不同之處在於設定原始檔的方式不同。1 首先fstat,stat和lstat三者都要用到的乙個結構體型別,名字叫做struct stat。這個struct stat結構體在不同的unix linu...
fstat函式及struct stat結構
一 fstat 函式 功能 由檔案描述符取得檔案狀態。相關函式 stat lstat chmod chown readlink utime。標頭檔案 include include 函式宣告 int fstat int filedes,struct buf 描述 fstat 用來將引數filedes...
fstat函式及struct stat結構
一 fstat 函式 功能 由檔案描述符取得檔案狀態。標頭檔案 include include 函式宣告 int fstat int filedes,struct buf 描述 fstat 用來將引數filedes 所指向的檔案狀態複製到引數buf 所指向的結構中 struct stat fstat...