每日總結
20240221
花自飄零水自流。一種相思,兩處閑愁。 —— 李清照「一剪梅·紅藕香殘玉簟秋」
1. stat
在Linux中,stat
是一個用于顯示文件或文件系統狀態的命令行工具。它提供了關于文件的詳細信息,包括文件類型、權限、大小、所有者、修改時間等等。stat
命令對于了解文件的元數據非常有用,并且在 shell 腳本中經常被用來獲取文件信息以進行進一步的處理。
以下是 stat
命令的基本用法和輸出示例:
stat <file_path>
這會顯示指定文件的詳細信息。
示例輸出:
File: example.txtSize: 69 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 775121 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ group)
Access: 2024-02-21 12:34:56.789012345 +0100
Modify: 2024-02-20 23:45:12.345678901 +0100
Change: 2024-02-20 23:45:12.345678901 +0100Birth: -
這里是輸出中的一些關鍵部分的解釋:
- File:文件名。
- Size:文件大小(字節)。
- Blocks:文件所占據的磁盤塊數。
- IO Block:文件的塊大小。
- Device:設備號。
- Inode:文件的索引節點號。
- Links:硬鏈接數。
- Access:訪問時間和權限。
- Modify:修改時間。
- Change:狀態改變時間。
- Birth:創建時間。
stat
命令還支持一些選項,例如 -c
用于自定義輸出格式,-f
用于顯示文件系統狀態,等等。你可以通過 man stat
命令來查看完整的 stat
命令手冊以獲取更多詳細信息。
在程序中,stat
函數通常用于獲取文件的元數據信息,比如文件大小、訪問權限、創建時間等等。stat
函數位于 <sys/stat.h>
頭文件中,并且在 POSIX 系統上是標準的系統調用之一。
下面是一個簡單的示例程序,演示如何使用 stat
函數獲取文件的元數據信息:
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>int main() {char filename[] = "example.txt"; // 文件名struct stat file_stat;// 獲取文件的元數據信息if (stat(filename, &file_stat) == 0) {printf("File: %s\n", filename);printf("Size: %ld bytes\n", file_stat.st_size); // 文件大小(字節)printf("Mode: %o\n", file_stat.st_mode); // 文件權限printf("Owner UID: %d\n", file_stat.st_uid); // 文件所有者的用戶 IDprintf("Group GID: %d\n", file_stat.st_gid); // 文件所屬組的組 IDprintf("Last access: %ld\n", file_stat.st_atime); // 最后訪問時間printf("Last modification: %ld\n", file_stat.st_mtime); // 最后修改時間printf("Last status change: %ld\n", file_stat.st_ctime); // 最后狀態改變時間} else {perror("stat");return 1;}return 0;
}
在這個示例中,我們首先包含了 <sys/stat.h>
頭文件以使用 stat
函數。然后我們聲明了一個 struct stat
結構體變量 file_stat
,用于存儲獲取到的文件元數據信息。接著我們調用 stat
函數,傳入文件名和一個指向 struct stat
結構體的指針,以獲取文件的元數據信息。如果 stat
函數成功執行,則我們可以通過訪問 struct stat
結構體的成員來獲取所需的文件信息。
請注意,stat
函數返回 0 表示成功,返回 -1 表示失敗,并且錯誤碼會被設置到 errno
變量中。因此,我們在示例中使用了 perror
函數來打印出錯誤信息,以便排查問題。
以上就是在程序中使用 stat
函數的基本介紹。通過這個函數,我們可以輕松地獲取到文件的各種元數據信息,從而進行進一步的處理。