Last Update 2012/07/05
ファイル(ディレクトリ)に関する情報を取得します。
戻り値1 = stat( 引数1 , 引数2 )
戻り値1 :
int
実行が成功した場合 : 0
成功以外の場合 : -1
成功以外の場合 : -1
引数1 :
char *
情報を取得するファイル(ディレクトリ)のパス
引数2 :
struct stat *
ファイルの情報が返される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の戻り値
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