名 前
stat, fstat, lstat, fstatat − フ ァ イ ル の 状 態 を 取 得 す る
書 式
#include
<sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int
stat(const char *pathname, struct stat
*buf);
int fstat(int fd, struct stat
*buf);
int lstat(const char *pathname, struct stat
*buf);
#include
<fcntl.h> /* AT_* 定 数 の
定 義 */
#include <sys/stat.h>
int
fstatat(int dirfd, const char
*pathname, struct stat *buf,
int flags);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
lstat():
/* glibc 2.19 以 前
*/ _BSD_SOURCE ||
/* glibc 2.20 以 降 */_DEFAULT_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* glibc 2.10 以 降 : */
_POSIX_C_SOURCE >= 200112L
fstatat():
glibc 2.10 以 降 :
_XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
glibc 2.10 よ り 前 :
_ATFILE_SOURCE
説 明
こ れ ら の 関 数 は 、 フ ァ イ ル に つ い て の 情 報 を stat が 指 す バ ッ フ ァ ー に 格 納 し て 返 す 。 フ ァ イ ル そ の も の に 対 す る ア ク セ ス 許 可 は 必 要 と し な い が 、 —stat(), fstatat(), lstat() の 場 合 に は —そ の フ ァ イ ル へ 至 る pathname を 構 成 す る 全 て の デ ィ レ ク ト リ に 対 す る 実 行 (検 索 ) 許 可 が 必 要 で あ る 。
stat() と fstatat() は pathname が 指 す フ ァ イ ル に 関 す る 情 報 を 取 得 す る 。 fstatat() の 違 い に つ い て は 後 で 説 明 す る 。
lstat() は stat() と 同 じ で あ る が 、 pathnames が シ ン ボ リ ッ ク リ ン ク の 場 合 、 リ ン ク が 参 照 し て い る フ ァ イ ル で は な く 、 リ ン ク 自 身 の 状 態 を 返 す 点 が 異 な る 。
fstat() は stat() と 同 じ だ が 、 状 態 を 取 得 す る フ ァ イ ル を フ ァ イ ル デ ィ ス ク リ プ タ ー fd で 指 定 す る 点 が 異 な る 。 こ れ ら の シ ス テ ム コ ー ル は い ず れ も 、 結 果 を stat 構 造 体 に 入 れ て 返 す 。 stat 構 造 体 に は 以 下 の フ ィ ー ル ド が 含 ま れ て い る :
struct stat {
dev_t st_dev; /* フ ァ イ ル
が あ る デ バ イ
ス の ID */
ino_t st_ino; /* inode 番 号 */
mode_t st_mode; /* ア ク セ ス
保 護 */
nlink_t st_nlink; /* ハ ー ド リ
ン ク の 数 */
uid_t st_uid; /* 所 有 者 の
ユ ー ザ ー ID */
gid_t st_gid; /* 所 有 者 の
グ ル ー プ ID */
dev_t st_rdev; /* デ バ イ ス ID
(特 殊 フ ァ イ ル
の 場 合 ) */
off_t st_size; /* 全 体 の サ
イ ズ (バ イ ト 単
位 ) */
blksize_t st_blksize; /* フ ァ イ ル
シ ス テ ム I/O で の
ブ ロ ッ ク サ イ
ズ
*/
blkcnt_t st_blocks; /* 割 り 当 て
ら れ た 512B の ブ ロ
ッ ク 数 */ };
/* Linux 2.6
以 降 で は 、 カ
ー ネ ル は 以 下
の タ イ ム ス タ
ン プ フ ィ ー ル
ド で ナ ノ 秒 の
精 度 を サ ポ ー
ト し て い る 。
Linux 2.6 よ り 前 の バ
ー ジ ョ ン で の
詳 細 は 下 記 の
「 注 意 」 を 参
照 。
*/
struct timespec
st_atim; /* 最 終 ア ク セ
ス 時 刻 */
struct timespec st_mtim; /* 最 終 修
正 時 刻 */
struct timespec st_ctim; /* 最 終 状
態 変 更 時 刻 */
#define
st_atime st_atim.tv_sec /* 後 方 互
換 性 */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec }; 注 意 :
stat 構 造 体 の フ
ィ ー ル ド の 順
序 は ア ー キ テ
ク チ ャ ー に よ
り 様 々 で あ る
。 ま た 、 上 記
の 定 義 で は 、
フ ィ ー ル ド 間
に 存 在 す る こ
と が あ る パ デ
ィ ン グ バ イ ト
は 書 か れ て い
な い 。 こ の パ
デ ィ ン グ バ イ
ト は ア ー キ テ
ク チ ャ ー に よ
っ て も 異 な る
。 詳 細 を 知 る
必 要 が あ る 場
合 は glibc と カ ー ネ
ル の ソ ー ス を
調 べ て ほ し い
。
st_dev フ ィ ー ル ド は 、 こ の フ ァ イ ル が 存 在 す る デ バ イ ス を 示 す (マ ク ロ major(3), minor(3) は 、 こ の フ ィ ー ル ド の デ バ イ ス ID を 分 解 す る の に 役 立 つ だ ろ う )。
st_rdev フ ィ ー ル ド は 、 こ の フ ァ イ ル (inode) が 表 す デ バ イ ス を 示 す 。
st_size フ ィ ー ル ド は 、 (通 常 の フ ァ イ ル か シ ン ボ リ ッ ク リ ン ク の 場 合 に ) フ ァ イ ル の 大 き さ を バ イ ト 単 位 で 示 す 。 シ ン ボ リ ッ ク リ ン ク の 大 き さ は 、 シ ン ボ リ ッ ク リ ン ク に 含 ま れ て い る パ ス 名 の 長 さ (終 端 の ヌ ル バ イ ト は 含 ま な い ) で あ る 。
st_blocks フ ィ ー ル ド は 、 フ ァ イ ル の 大 き さ を 512 バ イ ト の ブ ロ ッ ク サ イ ズ 単 位 で 示 す フ ィ ー ル ド は 、 フ ァ イ ル に 割 り 当 て さ れ た ブ ロ ッ ク 数 を 512 バ イ ト 単 位 で 示 す 。 (フ ァ イ ル に 穴 が あ る よ う な 場 合 、 こ の 値 は st_size/512 よ り 小 さ く な る こ と も あ る )。
st_blksize フ ィ ー ル ド は 、 効 率 的 に フ ァ イ ル シ ス テ ム I/O が で き る 「 好 ま し い 」 ブ ロ ッ ク サ イ ズ を 示 す (も っ と 小 さ い 単 位 で フ ァ イ ル に 書 き 込 み を 行 う と 、 読 み 出 し −−修 正 −−再 書 き 込 み と い っ た 非 効 率 な 動 作 に な っ て し ま う か も し れ な い )。 全 て の Linux の フ ァ イ ル シ ス テ ム が 全 て の 時 間 フ ィ ー ル ド を 実 装 し て い る わ け で は な い 。 フ ァ イ ル や デ ィ レ ク ト リ の ア ク セ ス が st_atime フ ィ ー ル ド を 更 新 し な い よ う な か た ち で マ ウ ン ト で き る フ ァ イ ル シ ス テ ム も あ る 。 (mount(8) の noatime, nodiratime, relatime や mount(2) の 関 連 す る 情 報 を 参 照 )。 ま た 、 フ ァ イ ル が O_NOATIME 付 き で オ ー プ ン さ れ て い る 場 合 に は st_atime は 更 新 さ れ な い 。 open(2) 参 照 。
st_atime フ ィ ー ル ド は フ ァ イ ル ア ク セ ス が あ っ た 場 合 に 変 更 さ れ る (例 え ば 、 execve(2), mknod(2), pipe(2), utime(2) を 使 用 し た 場 合 や read(2) で 1 バ イ ト 以 上 読 み 込 ん だ 場 合 な ど )。 mmap(2) な ど の 他 の ル ー チ ン で は 、 st_atime は 更 新 さ れ る こ と も あ れ ば 、 そ う で な い 場 合 も あ る 。
st_mtime フ ィ ー ル ド は 、 フ ァ イ ル が 修 正 さ れ た 場 合 に 変 更 さ れ る (例 え ば 、 mknod(2), truncate(2), utime(2) を 使 用 し た 場 合 や write(2) で 1 バ イ ト 以 上 書 き 込 み を し た 場 合 な ど )。 さ ら に 、 デ ィ レ ク ト リ の st_mtime は 、 そ の デ ィ レ ク ト リ で フ ァ イ ル が 作 成 さ れ た り 削 除 さ れ た り す る と 変 更 さ れ る 。 st_mtime フ ィ ー ル ド は 所 有 者 や グ ル ー プ や ハ ー ド リ ン ク 数 や モ ー ド の 変 更 で は 変 更 さ れ な い 。
st_ctime フ ィ ー ル ド は 書 き 込 み や inode 情 報 (所 有 者 、 グ ル ー プ 、 リ ン ク 数 、 モ ー ド な ど ) の 設 定 に よ っ て 変 更 さ れ る 。 以 下 の マ ス ク 値 が st_mode フ ィ ー ル ド の フ ァ イ ル 種 別 の 検 査 用 に 定 義 さ れ て い る 。
し た が っ て 、 (例 え ば ) 通 常 の フ ァ イ ル か ど う か を 検 査 す る に は 、 以 下 の よ う に す れ ば よ い 。
stat(pathname,
&sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* Handle regular file */ } 上 記 の
形 の 検 査 は よ
く あ る の で 、 POSIX
で は 以 下 の マ
ク ロ が 定 義 さ
れ て お り 、 st_mode
の フ ァ イ ル 種
別 の 検 査 を よ
り 簡 単 に 書 け
る よ う に な っ
て い る 。
S_ISREG(m) 通 常 の フ ァ イ ル か |
? |
|||
S_ISDIR(m) デ ィ レ ク ト リ か |
?
S_ISCHR(m) キ ャ ラ ク タ ー デ バ イ ス か |
? |
|||
S_ISBLK(m) ブ ロ ッ ク デ バ イ ス か |
?
S_ISFIFO(m) |
FIFO (名 前 付 き パ イ プ ) か ?
シ ン ボ
リ ッ ク リ ン ク
か ? (POSIX.1−1996 に は な
い ) 上 で 挙 げ た コ ー ド は 以 下 の よ う に 書 き 換 え る こ と が で き る 。 stat(pathname,
&sb); S_ISSOCK() の 定 義 が 公 開 さ れ る の は 以 下 の 機 能 検 査 マ ク ロ が 定 義 さ れ て い る 場 合 で あ る : _BSD_SOURCE (glibc 2.19 以 前 の 場 合 )、 _DEFAULT_SOURCE (glibc 2.20 以 降 の 場 合 )、 値 500 以 上 の _XOPEN_SOURCE、 値 が 200112L 以 上 の _POSIX_C_SOURCE。 以 下 の マ ス ク 値 が st_mode フ ィ ー ル ド の フ ァ イ ル の ア ク セ ス 許 可 の 検 査 用 に 定 義 さ れ て い る 。 set−group−ID bit (S_ISGID) に は い く つ か の 特 殊 な 使 用 法 が あ る : デ ィ レ ク ト リ に 設 定 し た 場 合 に は 、 そ の デ ィ レ ク ト リ が BSD 方 式 で 使 用 さ れ る こ と を 示 す 。 つ ま り 、 そ の デ ィ レ ク ト リ に 作 成 さ れ た フ ァ イ ル の グ ル ー プ ID は 作 成 し た プ ロ セ ス の 実 効 (effective) グ ル ー プ ID で は な く 、 デ ィ レ ク ト リ の グ ル ー プ ID を 継 承 す る 。 ま た 、 そ の デ ィ レ ク ト リ に 作 成 さ れ た デ ィ レ ク ト リ に も S_ISGID ビ ッ ト が 設 定 さ れ る 。 グ ル ー プ 実 行 ビ ッ ト (S_IXGRP) が 設 定 さ れ て い な い フ ァ イ ル に 設 定 さ れ た 場 合 は 、 set−group−ID ビ ッ ト は フ ァ イ ル /レ コ ー ド の 強 制 的 な (mandatory) ロ ッ ク を 表 す 。 デ ィ レ ク ト リ に ス テ ィ ッ キ ー ビ ッ ト (S_ISVTX) が 設 定 さ れ た 場 合 は 、 そ の デ ィ レ ク ト リ の フ ァ イ ル の 名 前 を 変 更 し た り 、 削 除 し た り で き る の は 、 そ の フ ァ イ ル の 所 有 者 か 、 そ の デ ィ レ ク ト リ の 所 有 者 か 、 特 権 プ ロ セ ス だ け と な る 。 fstatat()
pathname が 相 対 パ ス で 、 dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 (stat(2) と 同 様 に ) pathname は 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る 。 pathname
で 指 定 さ れ た
パ ス 名 が 絶 対
パ ス の 場 合 、
dirfd は 無 視 さ れ
る 。 こ の flags 引
き 数 は 下 記 の
フ ラ グ の 0 個 以
上 の 論 理 和 を
取 っ た も の で
あ る : pathname が 空 文 字 列 の 場 合 、 dirfd が 参 照 す る フ ァ イ ル に 対 し て 操 作 を 行 う (dirfd は open(2) の O_PATH フ ラ グ を 使 っ て 取 得 で き る )。 dirfd が AT_FDCWD の 場 合 、 呼 び 出 し は カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 し て 操 作 を 行 う 。 こ の 場 合 、 dirfd は 、 デ ィ レ ク ト リ だ け で な く 、 任 意 の タ イ プ の フ ァ イ ル を 参 照 す る こ と が で き る 。 こ の フ ラ グ は Linux 固 有 で あ り 、 そ の 定 義 を 得 る に は _GNU_SOURCE を 定 義 す る こ と 。 AT_NO_AUTOMOUNT (Linux 2.6.38 以 降 ) pathname が オ ー ト マ ウ ン ト ポ イ ン ト と な っ て い る デ ィ レ ク ト リ の 場 合 、 pathname の 最 終 ("basename") 要 素 の オ ー ト マ ウ ン ト を 行 わ な い 。 こ れ に よ り (マ ウ ン ト さ れ る は ず の 場 所 で は な く ) オ ー ト マ ウ ン ト ポ イ ン ト の 属 性 を 取 得 す る こ と が で き る 。 こ の フ ラ グ を 使 う と 、 デ ィ レ ク ト リ を ス キ ャ ン す る ツ ー ル が オ ー ト マ ウ ン ト ポ イ ン ト の デ ィ レ ク ト リ を 大 量 に オ ー ト マ ウ ン ト し て し ま う の を 防 ぐ こ と が で き る 。 マ ウ ン ト ポ イ ン ト が す で に マ ウ ン ト さ れ て い る 場 合 AT_NO_AUTOMOUNT フ ラ グ は 何 の 効 果 も な い 。 こ の フ ラ グ は Linux 固 有 で あ り 、 そ の 定 義 を 得 る に は _GNU_SOURCE を 定 義 す る こ と 。 AT_SYMLINK_NOFOLLOW (lstat() 同 様 ) pathname が シ ン ボ リ ッ ク リ ン ク の 場 合 リ ン ク の 展 開 を 行 わ ず 、 リ ン ク 自 身 の 情 報 を 返 す (デ フ ォ ル ト で は 、 fstatat() は 、 stat() と 同 様 に 、 シ ン ボ リ ッ ク リ ン ク の 展 開 を 行 う )。 fstatat() の 必 要 性 に つ い て の 説 明 に つ い て は openat(2) を 参 照 。 返 り 値成 功 し た 場 合 、 0 が 返 さ れ る 。 失 敗 し た 場 合 、 −1 が 返 さ れ 、 errno に 適 切 な 値 が セ ッ ト さ れ る 。 エ ラ ー
ア ド レ ス が 間 違 っ て い る 。
ENAMETOOLONG pathname が 長 過 ぎ る 。
カ ー ネ ル の メ モ リ ー が 足 り な い 。
pathname の 前 半 部 分 (prefix) の 構 成 要 素 が デ ィ レ ク ト リ で は な い 。 EOVERFLOW pathname ま た は fd が 、 フ ァ イ ル サ イ ズ 、 inode 番 号 、 ブ ロ ッ ク 数 が そ れ ぞ れ off_t 型 、 ino_t 型 、 blkcnt_t 型 で 表 現 で き な い フ ァ イ ル を 参 照 し て い る 。 こ の エ ラ ー が 起 こ る の は 、 例 え ば 、 32 ビ ッ ト プ ラ ッ ト フ ォ ー ム 上 で −D_FILE_OFFSET_BITS=64 を 指 定 せ ず に コ ン パ イ ル さ れ た ア プ リ ケ ー シ ョ ン が 、 フ ァ イ ル サ イ ズ が (1<<31)−1 バ イ ト を 超 え る フ ァ イ ル に 対 し て stat() を 呼 び 出 し た 場 合 で あ る 。 fstatat() で は 以 下 の エ ラ ー も 発 生 す る こ と が あ る 。
ENOTDIR pathname が 相 対 パ ス で 、 dirfd が デ ィ レ ク ト リ 以 外 の フ ァ イ ル を 参 照 し て い る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。 バ ー ジ ョ ンfstatat() は カ ー ネ ル 2.6.16 で Linux に 追 加 さ れ た 。 ラ イ ブ ラ リ に よ る サ ポ ー ト は バ ー ジ ョ ン 2.4 で glibc に 追 加 さ れ た 。 準 拠stat(), fstat(), lstat(): SVr4, 4.3BSD, POSIX.1−2001, POSIX.1.2008. fstatat(): POSIX.1−2008. POSIX.1−2001 で は 、 シ ン ボ リ ッ ク リ ン ク に 対 す る lstat() で 有 効 な 情 報 を 返 す よ う に 求 め ら れ て い た の は 、 stat 構 造 体 の st_size と st_mode の フ ァ イ ル 種 別 要 素 だ け で あ っ た 。 POSIX.1−2008 で は 規 定 が 厳 し く な り 、 lstat() は st_mode の ア ク セ ス 許 可 ビ ッ ト 以 外 の 全 て の フ ィ ー ル ド に 有 効 な 情 報 を 返 す こ と が 求 め ら れ る よ う に な っ て い る 。 st_blocks と st_blksize フ ィ ー ル ド の 使 用 は あ ま り 移 植 性 が な い (こ れ ら の フ ィ ー ル ド は BSD に よ っ て 導 入 さ れ た 。 シ ス テ ム ご と に 解 釈 が 異 な っ て お り 、 NFS マ ウ ン ト の 場 合 に は 同 じ シ ス テ ム で も 異 な る 可 能 性 が あ る )。 <sys/stat.h> か ら blkcnt_t の blksize_t 型 定 義 を 読 み 込 み た い 場 合 は 、 (ど の ヘ ッ ダ ー フ ァ イ ル を イ ン ク ル ー ド す る よ り も 前 に ) _XOPEN_SOURCE を 500 以 上 の 値 で 定 義 す る こ と 。 POSIX.1−1990 に は S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX 定 数 に 関 す る 記 述 は な か っ た が 、 代 わ り に S_ISDIR() の よ う な マ ク ロ を 使 用 す る よ う に 要 求 し て い た 。 S_IF* 定 数 は POSIX.1−2001 以 降 に は 存 在 す る 。 マ ク ロ S_ISLNK() と S_ISSOCK() は POSIX.1−1996 に は な い が 、 POSIX.1−2001 に は 両 方 と も 存 在 す る 。 前 者 は SVID 4 に 、 後 者 は SUSv2 に 由 来 し て い る 。 UNIX V7 (と そ の 後 の シ ス テ ム ) は S_IREAD, S_IWRITE, S_IEXEC を 持 っ て お り 、 POSIX は そ の 同 義 語 と し て S_IRUSR, S_IWUSR, S_IXUSR を 規 定 し て い る 。 他 の シ ス テ ム 各 種 シ ス テ ム で 使 用 さ れ て い た (い る )値 : ス テ ィ ッ キ ー コ マ ン ド は Version 32V AT&T UNIX で 登 場 し た 。 注 意Linux で は 、 lstat() は 一 般 に は 自 動 マ ウ ン ト 動 作 (automounter action) の き っ か け と な ら な い が 、 stat() は き っ か け と な る (fstatat(2) を 参 照 )。 /proc デ ィ レ ク ト リ 以 下 に あ る フ ァ イ ル の ほ と ん ど で は 、 stat() を 呼 び 出 し た 際 に 、 st_size フ ィ ー ル ド に フ ァ イ ル サ イ ズ が 返 さ れ な い 。 代 わ り に st_size フ ィ ー ル ド に は 0 が 返 さ れ る 。 タ イ ム ス タ ン プ フ ィ ー ル ド 古 い カ ー ネ ル や 古 い 標 準 で は 、 ナ ノ 秒 精 度 の タ イ ム ス タ ン プ フ ィ ー ル ド は サ ポ ー ト さ れ て い な か っ た 。 代 わ り に 3 つ の time_t 型 の タ イ ム ス タ ン プ フ ィ ー ル ド st_atime, st_mtime, and st_ctime が あ っ た 。 こ れ ら の フ ィ ー ル ド に は 1 秒 単 位 の タ イ ム ス タ ン プ が 記 録 さ れ て い た 。 カ ー ネ ル 2.5.48 以 降 で は 、 stat 構 造 体 は 3 つ の フ ァ イ ル の タ イ ム ス タ ン プ 関 連 の フ ィ ー ル ド で ナ ノ 秒 単 位 の 精 度 に 対 応 し て い る 。 機 能 検 査 マ ク ロ _BSD_SOURCE か _SVID_SOURCE が 定 義 さ れ た 場 合 に 、 各 タ イ ム ス タ ン プ の ナ ノ 秒 の 情 報 は st_atim.tv_nsec と い う 形 式 の 名 前 で 参 照 で き る 。 ナ ノ 秒 の タ イ ム ス タ ン プ は 現 在 で は 標 準 化 さ れ て お り 、 POSIX.1−2008 か ら で あ る 。 バ ー ジ ョ ン 2.12 以 降 の glibc で は 、 _POSIX_C_SOURCE が 200809L 以 上 の 値 で 定 義 さ れ る か 、 _XOPEN_SOURCE が 700 以 上 の 値 で 定 義 さ れ た 場 合 に も 、 こ の ナ ノ 秒 の タ イ ム ス タ ン プ が 公 開 さ れ る 。 上 記 の マ ク ロ の い ず れ も 定 義 さ れ て い な い 場 合 、 ナ ノ 秒 の 値 は st_atimensec と い う 形 式 の 名 前 で 公 開 さ れ る 。 ナ ノ 秒 の タ イ ム ス タ ン プ は XFS, JFS, Btrfs, ext4 で サ ポ ー ト さ れ て い る (Linux 2.6.23 以 降 )。 ナ ノ 秒 の タ イ ム ス タ ン プ は ext2, ext3, Reiserfs で は サ ポ ー ト さ れ て い な い 。 サ ブ 秒 の タ イ ム ス タ ン プ を サ ポ ー ト し て い な い フ ァ イ ル シ ス テ ム で は 、 ナ ノ 秒 の フ ィ ー ル ド に は 値 0 が 入 る 。 背 後 の カ ー ネ ル イ ン タ ー フ ェ ー ス 時 間 の 経 過 と と も に 、 stat 構 造 体 の サ イ ズ が 大 き く な り 、 こ の 影 響 で stat() に は 3つ の バ ー ジ ョ ン が 存 在 す る : sys_stat() (ス ロ ッ ト は __NR_oldstat)、 sys_newstat() (ス ロ ッ ト は __NR_stat)、 sys_stat64() (カ ー ネ ル 2.4 で 導 入 ; ス ロ ッ ト は __NR_stat64). glibc の stat() ラ ッ パ ー 関 数 は こ れ ら の 詳 細 を ア プ リ ケ ー シ ョ ン か ら 隠 蔽 し て く れ る 。 具 体 的 に は 、 カ ー ネ ル が 提 供 し て い る シ ス テ ム コ ー ル の う ち 最 新 の バ ー ジ ョ ン を 起 動 し 、 古 い バ イ ナ リ の 場 合 に は 必 要 に 応 じ て 返 さ れ た 情 報 を 再 構 成 (repack) す る 。 fstat() と lstat() に つ い て も 同 様 で あ る 。 glibc の fstatat() ラ ッ パ ー 関 数 が 内 部 で 利 用 す る シ ス テ ム コ ー ル は 、 実 際 に は fstatat64() で あ る 。 例以 下 の プ ロ グ ラ ム は stat() を 呼 び 出 し 、 返 っ て き た stat 構 造 体 の フ ィ ー ル ド の い く つ か を 表 示 す る 。 #include
<sys/types.h> int if (argc != 2)
{ if
(stat(argv[1], &sb) == −1) { printf("File type: "); switch
(sb.st_mode & S_IFMT) { printf("I−node number: %ld\n", (long) sb.st_ino); printf("Mode:
%lo (octal)\n", printf("Link
count: %ld\n", (long) sb.st_nlink); printf("Preferred
I/O block size: %ld bytes\n", printf("Last
status change: %s", ctime(&sb.st_ctime)); exit(EXIT_SUCCESS); } 関 連 項 目ls(1), stat(1), access(2), chmod(2), chown(2), readlink(2), utime(2), capabilities(7), symlink(7) こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |