fstat函式使用

2021-07-03 10:10:34 字數 3310 閱讀 5359

一、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...