C言語システムコール-stat
statシステムコール
概要
statはファイルやディレクトリの状態を取得します。
指定ファイルがシンボリックリンクである場合、statはリンク先を辿って実体ファイルの情報を取得します。
シンボリックリンク自体の情報を取得する場合にはlstatなどを使用します。
fstatは、ファイルディスクリプタで対象ファイルを指定します。
サンプルプログラム
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
/*!
* @brief ファイル情報を表示する
* @param[in] filepath ファイルパス名
* @return 0:success/-1:failure
*/
static int
show_file_info(char *filepath)
{
int rc = 0;
struct stat sb = {0};
rc = stat(filepath, &sb);
if(rc < 0){
printf("Error: stat() %s: %s\n", strerror(errno), filepath);
return(-1);
}
printf("ファイル名 : %s\n", filepath);
printf("デバイスID : %d\n", (int)sb.st_dev);
printf("inode番号 : %d\n", (int)sb.st_ino);
printf("パーミッション : %o\n", (int)sb.st_mode);
printf("ハードリンク数 : %d\n", (int)sb.st_nlink);
printf("所有者のユーザID : %d\n", (int)sb.st_uid);
printf("所有者のグループID : %d\n", (int)sb.st_gid);
printf("デバイスID(特殊ファイルの場合) : %d\n", (int)sb.st_rdev);
printf("容量(バイト単位) : %d\n", (int)sb.st_size);
printf("ファイルシステムのブロックサイズ : %d\n", (int)sb.st_blksize);
printf("割り当てられたブロック数 : %d\n", (int)sb.st_blocks);
printf("最終アクセス時刻 : %s", (char *)ctime(&sb.st_atime));
printf("最終修正時刻 : %s", (char *)ctime(&sb.st_mtime));
printf("最終状態変更時刻 : %s", (char *)ctime(&sb.st_ctime));
return(0);
}
int
main(int argc, char *argv[])
{
int rc = 0;
if(argc != 2){
fprintf(stderr, "Usage: %s <path>\n", argv[0]);
exit(EXIT_FAILURE);
}
rc = show_file_info(argv[1]);
if(rc != 0) exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
}