1. 程式人生 > >stat函式的使用 獲取檔案狀態 可以將檔案狀態複製儲存在一個stat結構地址中,以此取得檔案的大小等狀態

stat函式的使用 獲取檔案狀態 可以將檔案狀態複製儲存在一個stat結構地址中,以此取得檔案的大小等狀態

相關函式:fstat, lstat, chmod, chown, readlink, utime

標頭檔案:#include <sys/stat.h>   #include <unistd.h>

定義函式:int stat(const char * file_name, struct stat *buf);

函式說明:stat()用來將引數file_name 所指的檔案狀態, 複製到引數buf 所指的結構中。

下面是struct stat 內各引數的說明:
struct stat
{
    dev_t st_dev; //device 檔案的裝置編號
    ino_t st_ino; //inode 檔案的i-node
    mode_t st_mode; //protection 檔案的型別和存取的許可權
    nlink_t st_nlink; //number of hard links 連到該檔案的硬連線數目, 剛建立的檔案值為1.
    uid_t st_uid; //user ID of owner 檔案所有者的使用者識別碼
    gid_t st_gid; //group ID of owner 檔案所有者的組識別碼
    dev_t st_rdev; //device type 若此檔案為裝置裝置檔案, 則為其裝置編號
    off_t st_size; //total size, in bytes 檔案大小, 以位元組計算
    unsigned long st_blksize; //blocksize for filesystem I/O 檔案系統的I/O 緩衝區大小.
    unsigned long st_blocks; //number of blocks allocated 佔用檔案區塊的個數, 每一區塊大小為512 個位元組.
    time_t st_atime; //time of lastaccess 檔案最近一次被存取或被執行的時間, 一般只有在用mknod、utime、read、write 與tructate 時改變.
    time_t st_mtime; //time of last modification 檔案最後一次被修改的時間, 一般只有在用mknod、utime 和write 時才會改變
    time_t st_ctime; //time of last change i-node 最近一次被更改的時間, 此引數會在檔案所有者、組、許可權被更改時更新
};

先前所描述的st_mode 則定義了下列數種情況:
1、S_IFMT 0170000 檔案型別的位遮罩
2、S_IFSOCK 0140000 scoket
3、S_IFLNK 0120000 符號連線
4、S_IFREG 0100000 一般檔案
5、S_IFBLK 0060000 區塊裝置
6、S_IFDIR 0040000 目錄
7、S_IFCHR 0020000 字元裝置
8、S_IFIFO 0010000 先進先出
9、S_ISUID 04000 檔案的 (set user-id on execution)位
10、S_ISGID 02000 檔案的 (set group-id on execution)位
11、S_ISVTX 01000 檔案的sticky 位
12、S_IRUSR (S_IREAD) 00400 檔案所有者具可讀取許可權
13、S_IWUSR (S_IWRITE)00200 檔案所有者具可寫入許可權
14、S_IXUSR (S_IEXEC) 00100 檔案所有者具可執行許可權
15、S_IRGRP 00040 使用者組具可讀取許可權
16、S_IWGRP 00020 使用者組具可寫入許可權
17、S_IXGRP 00010 使用者組具可執行許可權
18、S_IROTH 00004 其他使用者具可讀取許可權
19、S_IWOTH 00002 其他使用者具可寫入許可權
20、S_IXOTH 00001 其他使用者具可執行許可權上述的檔案型別在 POSIX 中定義了檢查這些型別的巨集定義
21、S_ISLNK (st_mode) 判斷是否為符號連線
22、S_ISREG (st_mode) 是否為一般檔案
23、S_ISDIR (st_mode) 是否為目錄
24、S_ISCHR (st_mode) 是否為字元裝置檔案
25、S_ISBLK (s3e) 是否為先進先出
26、S_ISSOCK (st_mode) 是否為socket 若一目錄具有sticky 位 (S_ISVTX), 則表示在此目錄下的檔案只能被該檔案所有者、此目錄所有者或root 來刪除或改名.


返回值:執行成功則返回0,失敗返回-1,錯誤程式碼存於errno。

錯誤程式碼:
1、ENOENT 引數file_name 指定的檔案不存在
2、ENOTDIR 路徑中的目錄存在但卻非真正的目錄
3、ELOOP 欲開啟的檔案有過多符號連線問題, 上限為16 符號連線
4、EFAULT 引數buf 為無效指標, 指向無法存在的記憶體空間
5、EACCESS 存取檔案時被拒絕
6、ENOMEM 核心記憶體不足
7、ENAMETOOLONG 引數file_name 的路徑名稱太長


範例
#include <sys/stat.h>
#include <unistd.h>
main()
{
    struct stat buf;
    stat("/etc/passwd", &buf);
    printf("/etc/passwd file size = %d \n", buf.st_size);
}

執行:
/etc/passwd file size = 705

相關推薦

stat函式的使用 獲取檔案狀態 可以檔案狀態複製儲存一個stat結構地址以此取得檔案大小狀態

相關函式:fstat, lstat, chmod, chown, readlink, utime 標頭檔案:#include <sys/stat.h>   #include <unistd.h> 定義函式:int stat(const char * file_name, struc

十進位制轉化成2,8,16進位制數工具。程式碼全部複製一個txt文件儲存檔案字尾.txt改為.html再瀏覽器開啟即可

<!DOCTYPE html> <html lang="en"> <head> <meta charset="GBK"> <meta http-equiv="X-UA-Compatible" content="IE=ed

Linux-C基礎知識學習:C語言作業-5個學生成績儲存在一個數組單獨實現一個計算平均成績的average函式 在main函式獲取函式返回的平均值並列印。

Linux基礎知識學習 C語言作業:將5個學生成績儲存在一個數組中,單獨實現一個計算平均成績的average函式, 在main函式中獲取該函式返回的平均值,並列印。 #include <s

讀取excel檔案其中資料轉換成指令碼資料結構

using UnityEngine; using System.Collections; using Excel; using System.IO; using System.Text; using System.Data; using System.Collections.Generic; using Sy

打不開檔案“C:\Program Files\ubuntu\ubuntu\Ubuntu 64 位.vmdk”: 許可權不足無法訪問檔案

使用管理員許可權開啟虛擬機器,一般都可以解決。 補充: 1、無法連線   解決方法:以管理員身份執行此軟體。     2、使用vmware提示:無法開啟核心裝置 \\.\Global\vmx86: 系統找不到指定的檔案

Python關於讀取檔案編碼解碼的問題

UnicodeDecodeError: 'gbk' codec can't decode byte 0xb1 in position 94: illegal multibyte sequence 有時候用open()方法開啟檔案讀取檔案的時候會出現這個問題:‘GBK’編×××無法解碼

C# 基礎(十三)C# 軟體開發過程可執行檔案.exe 出現bug該怎麼排查、解決:找到出現bug的位置

一、簡介 之前是完成了寫軟體,從而實現軟體的基本功能。到了今天,需要對自己寫的可執行檔案.exe找bug了。那麼下面,我將結合自己的軟體的使用過程中,講自己的經驗融入進來,解釋下什麼是bug、以及該怎麼找Bug。 二、Bug的分類 主要參考: https://blog.csdn.ne

PyCharm整合環境在python檔案引入numpy包出錯

1、在ELM_python3.5.4.py中引入numpy包,出錯,如下圖1所示 2、原因 原因是pycharm所使用的直譯器並不是已經安裝的python3.5,而是專案自帶的python.exe直譯器,並且只有兩個模組pip和setuptools,許

VirtualBox虛擬系統檔案VDI移動或者複製

在安裝virtualbox以後有時需要複製,移動虛擬磁碟等操作,這些操作在vmware的虛擬機器下面可以直接操作虛擬磁碟即可使用,但是在virtualbox環境 下每個VDI 檔案都有一個唯一的uuid,而VirtualBox 不允許註冊重複的uuid,所以直接複製的V

C++程式設計利用WINDOWS API獲得系統狀態資訊[CPU佔用率硬碟使用情況記憶體使用情況]

#include <Ice/Ice.h> #include <iostream> #include <GetWinSysState.h> #include <Winbase.h> #include <conio.h>

一個函式獲取某一張指定的網絡卡的IP地址

/********************************************************************************* * Copyright: (C) 2018 NULL *

利用popen寫一個函式獲取某一張指定的網絡卡的IP地址

ifconfig eth1是在我電腦上的普通網絡卡裝置,今天我們來對這幾行數字進行操作,從而讀取它的IP地址和子網掩碼Netmask[[email protected] file]$ ifco

探討-資訊管理系統影象、檔案資料儲存方式

      常用的資訊管理系統,經常會有大量的法規、影象、附件等檔案需要存放,與之相對的許多大型資料庫系統也有對應的資料庫型別用於存放,然而,在一些大型應用管理系統中,常常會因為這些資料型別的存在或者資料庫設計的不合理,導致系統非常慢、所需的儲存空間非常大等一系列讓設計、開發

JSP防止 css js img 檔案的快取的方法

被這個問題困擾過很多回,上網也查過很多方法,基本上就是在 <head> 標籤中新增如下元素: <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-contro

shape檔案用法二:在Android用XML檔案實現圓角的效果

需求:好多時候,需要給元件加入圓角的效果,如下圖所示: 現在,要做的就是,實現 圖中所示的圓角效果。 第一步:在 res/drawable檔案下新增 ,檔案: btn_background_shape.xml 檔案。 /TestShape2/res/drawable/

winform如何選中datagridview的一行數據雙擊後跳轉並其顯示在另一個頁面的datagirdview

comm 行數據 OS tps dao component 一行 sha amp Form1: public static string[] a; private void dataGridView1_DoubleClick(object sender, Even

變量做為一個對象的keypush新增進一個數組

spa cti push [] 內容 for IE 總結 一個 var orgnIdListValue=["0","2"]; function arrayField(a,b){   let arrayMes=[];   for(var i=0;i<a.length;

SQL XML入門--Jinjazz大大的18句話放到procedure 方便隨時檢視

/* --本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/jinjazz/archive/2009/08/13/4443585.aspx sql xml 入門: --by jinjazz --http://blog.csdn.net/jinja