Loose-Info.com

Last Update 2019/12/24


TOP - C言語 - sys/stat.h - stat()

ファイル(ディレクトリ)に関する情報を取得します。

 戻り値1  = stat(  引数1  ,  引数2  )

戻り値1 :
int
実行が成功した場合 : 0
成功以外の場合 : -1
引数1 :
char *
情報を取得するファイル(ディレクトリ)のパス
引数2 :
struct stat *
ファイルの情報が返されるstat構造体へのポインタ

stat構造体のメンバ(主なもの)
mode_t st_mode : ファイルタイプとファイルモードを示す値
uid_t st_uid : ファイルのユーザーID
gid_t st_gid : ファイルのグループID
off_t st_size : ファイルサイズ(バイト)
struct timespec st_atimespec : ファイルの最終アクセス日時
struct timespec st_mtimespec : ファイルの最終更新日時
struct timespec st_ctimespec : ファイルステータス変更日時

sys/stat.h(Mac OS X 10.6 - [GCC 4.2])の中でのファイルタイプ・ファイルモードの記述
※st_modeの戻り値
/* File type */ #define S_IFMT 0170000 /* [XSI] type of file mask */ #define S_IFIFO 0010000 /* [XSI] named pipe (fifo) */ #define S_IFCHR 0020000 /* [XSI] character special */ #define S_IFDIR 0040000 /* [XSI] directory */ #define S_IFBLK 0060000 /* [XSI] block special */ #define S_IFREG 0100000 /* [XSI] regular */ #define S_IFLNK 0120000 /* [XSI] symbolic link */ #define S_IFSOCK 0140000 /* [XSI] socket */ #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) #define S_IFWHT 0160000 /* whiteout */ #endif /* File mode */ /* Read, write, execute/search by owner */ #define S_IRWXU 0000700 /* [XSI] RWX mask for owner */ #define S_IRUSR 0000400 /* [XSI] R for owner */ #define S_IWUSR 0000200 /* [XSI] W for owner */ #define S_IXUSR 0000100 /* [XSI] X for owner */ /* Read, write, execute/search by group */ #define S_IRWXG 0000070 /* [XSI] RWX mask for group */ #define S_IRGRP 0000040 /* [XSI] R for group */ #define S_IWGRP 0000020 /* [XSI] W for group */ #define S_IXGRP 0000010 /* [XSI] X for group */ /* Read, write, execute/search by others */ #define S_IRWXO 0000007 /* [XSI] RWX mask for other */ #define S_IROTH 0000004 /* [XSI] R for other */ #define S_IWOTH 0000002 /* [XSI] W for other */ #define S_IXOTH 0000001 /* [XSI] X for other */ #define S_ISUID 0004000 /* [XSI] set user id on execution */ #define S_ISGID 0002000 /* [XSI] set group id on execution */ #define S_ISVTX 0001000 /* [XSI] directory restrcted delete */ #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) #define S_ISTXT S_ISVTX /* sticky bit: not supported */ #define S_IREAD S_IRUSR /* backward compatability */ #define S_IWRITE S_IWUSR /* backward compatability */ #define S_IEXEC S_IXUSR /* backward compatability */ #endif #endif /* !S_IFMT */

(例)
#include <stdio.h> #include <sys/stat.h> #include <dirent.h> #include <string.h> int main() { FILE *fp; struct dirent *dirst; struct stat buf; mkdir("test_dir_01", 0755); printf("stat()実行 : %d\n\n", stat("test_dir_01", &buf)); printf("ディレクトリ[test_dir_01]に関する情報\n"); printf(" st_mode : %#o\n", buf.st_mode); printf(" st_uid : %ld\n", (long)buf.st_uid); printf(" st_gid : %ld\n", (long)buf.st_gid); printf(" st_size : %ld\n", (long)buf.st_size); printf(" st_atimespec(秒) : %ld\n", (long)buf.st_atimespec.tv_sec); printf(" st_mtimespec(秒) : %ld\n", (long)buf.st_mtimespec.tv_sec); printf(" st_ctimespec(秒) : %ld\n\n", (long)buf.st_ctimespec.tv_sec); fp = fopen("test_dir_01/test_file_01.txt", "w"); fclose(fp); DIR *dp = opendir("test_dir_01"); while((dirst = readdir(dp)) != NULL) { if ((strcmp(dirst->d_name, ".") != 0) & (strcmp(dirst->d_name, "..") != 0)) { char s_file[100] = "test_dir_01/"; strcat(s_file, dirst->d_name); stat(s_file, &buf); printf("ファイル[%s]に関する情報\n", s_file); printf(" st_mode : %#o\n", buf.st_mode); printf(" st_uid : %ld\n", (long)buf.st_uid); printf(" st_gid : %ld\n", (long)buf.st_gid); printf(" st_size : %ld\n", (long)buf.st_size); printf(" st_atimespec(秒) : %ld\n", (long)buf.st_atimespec.tv_sec); printf(" st_mtimespec(秒) : %ld\n", (long)buf.st_mtimespec.tv_sec); printf(" st_ctimespec(秒) : %ld\n", (long)buf.st_ctimespec.tv_sec); } } closedir(dp); remove("test_dir_01/test_file_01.txt"); remove("test_dir_01"); return 0; }

実行結果
stat()実行 : 0 ディレクトリ[test_dir_01]に関する情報 st_mode : 040755 st_uid : 502 st_gid : 20 st_size : 68 st_atimespec(秒) : 1319810595 st_mtimespec(秒) : 1319810595 st_ctimespec(秒) : 1319810595 ファイル[test_dir_01/test_file_01.txt]に関する情報 st_mode : 0100644 st_uid : 502 st_gid : 20 st_size : 0 st_atimespec(秒) : 1319810595 st_mtimespec(秒) : 1319810595 st_ctimespec(秒) : 1319810595