函數stat、fstat、fstatat和lstat

一、主要函數應用?

#include <sys/stat.h>
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf)
int lstat(const char *path, struct stat *buf);
int fstat(int fd, const char *path, struct stat *buf, int flag);

參數:

  • ?stat讀取的是連接文件指向的文件的屬性l
  • stat讀取的鏈接文件本身的屬性lstat

?

二、struct stat 的結構體

struct stat 
{dev_t            st_dev;       //文件的設備編號ino_t            st_ino;       //節點mode_t           st_mode;      //文件的類型和存取的權限nlink_t          st_nlink;     //連到該文件的硬連接數目,剛建立的文件值為1uid_t            st_uid;       //用戶IDgid_t            st_gid;       //組IDdev_t            st_rdev;      //(設備類型)若此文件為設備文件,則為其設備編號off_t            st_size;      //文件字節數(文件大小)blksize_t        st_blksize;   //塊大小(文件系統的I/O 緩沖區大小)blkcnt_t         st_blocks;    //塊數time_t           st_atime;     //最后一次訪問時間time_t           st_mtime;     //最后一次修改時間time_t           st_ctime;     //最后一次改變時間(指屬性)
};

?

三、st_mode 的結構

  • 15-12 位保存文件類型
  • 11-9 位保存執行文件時設置的信息
  • 8-0 位保存文件訪問權限

圖1 展示了 st_mode 各個位的結構。?

四、一些常用的宏?

-st_mode -- 16位整數○ 0-2 bit -- 其他人權限
- S_IROTH      00004    讀權限
- S_IWOTH      00002    寫權限
- S_IXOTH      00001    執行權限
- S_IRWXO      00007    掩碼, 過濾 st_mode中除其他人權限以外的信息○ 3-5 bit -- 所屬組權限
- S_IRGRP      00040     讀權限
- S_IWGRP      00020     寫權限
- S_IXGRP      00010     執行權限
- S_IRWXG      00070     掩碼, 過濾 st_mode中除所屬組權限以外的信息○ 6-8 bit -- 文件所有者權限
- S_IWUSR      00200     寫權限
- S_IXUSR      00100     執行權限
- S_IRWXU      00700     掩碼, 過濾 st_mode中除文件所有者權限以外的信息○ 12-15 bit -- 文件類型
- S_IFSOCK     0140000   套接字
- S_IFLNK      0120000   符號鏈接(軟鏈接)
- S_IFBLK      0060000   塊設備
- S_IFDIR      0040000   目錄
- S_IFCHR      0020000   字符設備
- S_IFIFO      0010000   管道
- S_IFMT       0170000   掩碼,過濾 st_mode中除文件類型以外的信息(st_mode & S_IFMT) ==  S_IFREG

?

五、程序清單

測試代碼:

#include <stdio.h> 
#include <sys/stat.h> 
#include <stdlib.h>int main()
{struct stat st;struct stat* st1;st1 = &st;int ret = stat("english.txt", &st);if(ret == -1) {perror("stat error");exit(1);}printf("file size = %d\n", (int)st.st_size);return 0;
}

輸出結果:

?

#include <stdio.h> 
#include <sys/stat.h> 
#include <stdlib.h>int main()
{struct stat st;struct stat* st1;st1 = &st;int ret = stat("english.txt", &st);if(ret == -1) {perror("stat error");exit(1);}printf("file size = %d\n", (int)st.st_size);if(st.st_mode & S_IFMT == S_IFREG) {printf("這是一個普通文件\n");}if(st.st_mode & S_IRUSR) {printf(" R ");}if(st.st_mode & S_IWUSR) {printf(" W ");}if(st.st_mode & S_IXUSR) {printf(" X ");}printf("\n");return 0;
}

輸出結果:

?

#include <stdio.h> 
#include <sys/stat.h> 
#include <stdlib.h>int main()
{struct stat st;struct stat* st1;st1 = &st;int ret = lstat("s.s", &st);if(ret == -1) {perror("stat error");exit(1);}printf("file size = %d\n", (int)st.st_size);if(st.st_mode & S_IFMT == S_IFREG) {printf("這是一個普通文件\n");}if(st.st_mode & S_IRUSR) {printf(" R ");}if(st.st_mode & S_IWUSR) {printf(" W ");}if(st.st_mode & S_IXUSR) {printf(" X ");}printf("\n");return 0;
}

輸出結果:

參考資料:

1.?12-stat 函數

2.?13-stat 結構體 st_mode 字段

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385552.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java教程pdf下載百度云,面試題+筆記+項目實戰

一面問題&#xff1a;MySQLRedisKafka線程算法 mysql知道哪些存儲引擎&#xff0c;它們的區別mysql索引在什么情況下會失效mysql在項目中的優化場景&#xff0c;慢查詢解決等mysql有什么索引&#xff0c;索引模型是什么B-樹與B樹的區別&#xff1f;為什么不用紅黑樹mysql主從同…

函數mkdir、mkdirat和emdir

一、目錄的權限位 目錄的權限位&#xff0c;至少要設置一個執行許可位。即 rwx 中的那個 x 位。如果不設置&#xff0c;就沒辦法使用 cd 命令進入目錄&#xff0c;也無法讀取目錄下的文件內容。所以&#xff0c;這個位是必須的。目錄的寫權限位。如果未設置寫權限位(w 位)&…

java教程傳智播客,面試真題解析

01 阿里中間件&#xff08;四面&#xff0c;Java崗&#xff09; 1.1 Java中間件一面 技術一面考察范圍 重點問了Java線程鎖&#xff1a;synchronized 和ReentrantLock相關的底層實現 線程池的底層實現以及常見的參數 數據結構基本都問了一遍&#xff1a;鏈表、隊列等 Java內存…

函數chdir和get

摘要&#xff1a; chdir 這個命令類似于 linux 的命令 cd&#xff0c;而 getcwd 有點像 pwd。 函數原型&#xff1a; #include <unistd.h> int chdir(const char *path); char *getcwd(char *buf, size_t size); 當前工作目錄 當前工作目錄是針對進程而言的&#xff0…

java教程百度文庫,成功拿到offer

正文 現在市面上的算法資料也五花八門&#xff0c;種類繁多&#xff0c;小編也整理了一份不同于市面且有意思的算法資料&#xff0c;不能說多全面&#xff0c;但是是小編花了很長時間整理歸納出來的&#xff0c;自我感覺還行。分享給同事及群里反響都不錯&#xff0c;所以小編…

link系列函數

摘要&#xff1a; 圖解符號鏈接和硬鏈接的區別和i節點的介紹 二、link函數 link 函數專門用來創建硬鏈接的&#xff0c;功能和 ln 命令一樣。它主要做兩件事&#xff1a;1) 創建一個目錄項 2) inode 結構體引用計數加 1。這兩步是一個原子操作&#xff0c;要么全部失敗&#…

java數字排序代碼,進階加薪全靠它!

數據庫 2.1 池化技術&#xff1a;如何減少頻繁創建數據庫連接的性能損耗&#xff1f;2.2 數據庫優化方案&#xff08;一&#xff09;&#xff1a;查詢請求增加時&#xff0c;如何做主從分離&#xff1f;2.3 數據庫優化方案&#xff08;二&#xff09;&#xff1a;寫入數據量增…

函數umask

umask函數原型&#xff1a; #include <sys/stat.h> mode_t umask(mode_t mask); 分析&#xff1a; 在進程創建一個新的文件或目錄時&#xff0c;如調用open函數創建一個新文件&#xff0c;新文件的實際存取權限是mode與umask按照 mode&~umask運算以后的結果。umask…

java數據分析庫,威力加強版

美團技術一面20分鐘 晚7點&#xff0c;因為想到下周一才面試&#xff0c;我剛準備出去打個羽毛球&#xff0c;北京的電話就來了。面試官各種抱歉&#xff0c;說開會拖延了。 1、自我介紹 說了很多遍了&#xff0c;很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…

函數chown

一、chown 命令 下面以實例簡單講解下 chown 的使用方法。當前登錄的賬號是 sunbin 創建測試文件當前 test.txt 文件所有者是sunbin&#xff0c;所屬組也是sunbin。 利用 chown 命令修改 test.txt 的所有者和所屬組.可以看到&#xff0c;test.txt 的擁有者變成了 root&#…

不愧是Alibaba技術官,java數組實現單向鏈表

緩存雪崩 緩存雪崩指的是Redis當中的大量緩存在同一時間全部失效&#xff0c;而假如恰巧這一段時間同時又有大量請求被發起&#xff0c;那么就會造成請求直接訪問到數據庫&#xff0c;可能會把數據庫沖垮。 緩存雪崩一般形容的是緩存中沒有而數據庫中有的數據&#xff0c;而因…

【線程】讀寫鎖

一、概念 一把讀寫鎖具備三種狀態&#xff1a; 讀模式下加鎖狀態(讀鎖&#xff09;寫模式下加鎖轉態(寫鎖)不加鎖狀態2. 讀寫鎖特性&#xff1a; 讀寫鎖是寫模式加鎖時&#xff0c;解鎖前&#xff0c;所有對該鎖加鎖的線程都會阻塞。讀寫鎖是讀模式加鎖時&#xff0c;如果線程以…

不愧是阿里大佬,mysql存儲過程寫法案例

容器化時代來了 虛擬化技術已經走過了三個時代&#xff0c;沒有容器化技術的演進就不會有 Docker 技術的誕生。 虛擬化技術演進 &#xff08;1&#xff09;物理機時代&#xff1a;多個應用程序可能會跑在一臺機器上。 &#xff08;2&#xff09;虛擬機時代&#xff1a;一臺物…

讀寫鎖(二)

一、實驗項目 【問題描述】程序 trainticket 中&#xff0c;有 100 個線程&#xff0c;其中 90 個線程是查余票數量的&#xff0c;只有 10 個線程搶票&#xff0c;每個線程一次買 10 張票。初始狀態下一共有 1000 張票。因此執行完畢后&#xff0c;還會剩下 900 張票。 程序 …

不看絕對血虧!java字符串轉json

一、對Kafka的認識 1.Kafka的基本概念 2.安裝與配置 3.生產與消費 4.服務端參數配置 二、生產者 1.客戶端開發 必要的參數配置消息的發送序列化分區器生產者攔截器 2.原理分析 整體架構元數據的更新 3.重要的生產者參數 三、消費者 1.消費者與消費組 2.客戶端開發 必要的…

【線程】屏障

一、主要函數應用 1. 函數原型&#xff1a;初始化和回收 int pthread_barrier_init(pthread *barrier, const pthread_barrier_t *attr, unsigned int count); int pthread_barrier_destroy(pthread_barrier_t *barrier);分析&#xff1a; 初始化屏障時&#xff0c;可以使用c…

中高級工程師Java開發!java生成隨機數代碼包

微服務是什么 微服務起源于2005年Peter Rodgers博士在云端運算博覽會提出的微Web服務(Micro-Web-Service)&#xff0c;根本思想類似于Unix的管道設計理念。2014年&#xff0c;由Martin Fowler 與 James Lewis共同提出了微服務的概念&#xff0c;定義了微服務架構風格是一種通過…

Java軟件開發面試題!hr和技術經理一起面

springspring5最全知識梳理大綱&#xff08;總&#xff09; spring最全知識梳理大綱&#xff08;總&#xff09; spring5最全知識梳理大綱&#xff08;總&#xff09; spring最全知識梳理大綱&#xff08;分&#xff09; 為什么要使用Spring&#xff1f; Bean spring事務 面向…

XSI IPC

一、查詢IPC的命令 顯示&#xff1a; ipcs -a 顯示所有共享內核對象 ipcs -m 顯示共享內存 m memory ipcs -q 消息隊列 q queue ipcs -s 顯示信號量 s semphore刪除&#xff1a; ipcrm -m ID 刪除共享內存 ipcrm -q ID 刪除共享隊列 ipcrm -s ID 刪除信號量 二…

Java進階之光!javaunicode碼轉字符

01 如何理解高并發&#xff1f; 高并發意味著大流量&#xff0c;需要運用技術手段抵抗流量的沖擊&#xff0c;這些手段好比操作流量&#xff0c;能讓流量更平穩地被系統所處理&#xff0c;帶給用戶更好的體驗。 我們常見的高并發場景有&#xff1a;淘寶的雙11、春運時的搶票、…