int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
ÀÌ ÇÔ¼ö´Â ÁöÁ¤µÈ ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ ¹ÝȯÇÑ´Ù. ÀÌ Á¤º¸¸¦ ¾ò±â À§ÇØ ÇÊ¿äÇÑ Á¢±Ù ±ÇÇÑÀº ¾øÁö¸¸, ÆÄÀÏÀ» Àд °æ·Î¿¡ ÀÖ´Â ¸ðµç µð·ºÅ丮¿¡ ´ëÇÑ Å½»ö ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù.
stat ´Â file_name À¸·Î ÁöÁ¤µÈ ÆÄÀÏ¿¡ ´ëÇØ ¼³¸íÇÏ°í buf ¿¡ ä¿î´Ù. lstat ´Â stat ¿Í µ¿ÀϽõȴÙ.¸µÅ©´Â ±× ÀÚü·Î ¼³¸íµÈ´Ù, ¸µÅ©¿¡ Æ÷ÇԵǾî ÀÖ´Â ÆÄÀÏÀ» ¼³¸íÇÏÁö ¾Ê´Â´Ù. fstat ´Â stat¿Í µ¿ÀϽõȴÙ. file_name. ´ë½Å¿¡ filedes ¿¡ ÀÇÇØ ÁöÁ¤µÈ ¿¸° ÆÄÀϸ¸ ( open(2) ¿¡ ÀÇÇØ ¹ÝȯµÇµíÀÌ) ¼³¸íµÈ´Ù.
±×°ÍµéÀº ¸ðµÎ ¾Æ·¡ ¿µ¿ªÀ» Æ÷ÇÔÇÏ´Â stat ±¸Á¶À» ¹ÝȯÇÑ´Ù:
struct stat { dev_t st_dev; /* device */ ino_t st_ino; /* inode */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device type (if inode device) */ off_t st_size; /* total size, in bytes */ unsigned long st_blksize; /* blocksize for filesystem I/O */ unsigned long st_blocks; /* number of blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last change */ };
The value st_blocks °ªÀº 512-bytes ºí·Ï¿¡ ÀÖ´Â ÆÄÀÏÀÇ Å©±â¸¦ ÁØ´Ù. st_blksize °ªÀº È¿À²ÀûÀÎ ÆÄÀÏ ½Ã½ºÅÛ I/O¸¦ À§ÇØ "¼±ÅõÈ" ºí·Ï Å©±â¸¦ ÁØ´Ù. (´õ ÀÛÀº °ø°£¿¡ ÆÄÀÏÀ» ¾²´Â °ÍÀº ¾²°í-¼öÁ¤ÇÏ°í-´Ù½Ã ¾²´Âµ¥ ºñÈ¿À²ÀûÀÌ´Ù.)4
¸ðµç ¸®´ª½º ÆÄÀϽýºÅÛÀÌ ¸ðµç ½Ã°£ ¿µ¿ª¿¡¼ ½ÇÇàÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ÀüÅëÀûÀ¸·Î, st_atime ´Â mknod(2), utime(2), read(2), write(2),¿Í truncate(2). ·Î ¹Ù²î¾ú´Ù. ÀüÅëÀûÀ¸·Î, st_mtime ´Â mknod(2), utime(2),¿Í write(2). ·Î ¹Ù²î¾ú´Ù. st_mtime ´Â ¼ÒÀ¯ÀÚ, ±×·ì, Çϵ帵ũ Ä«¿îÆ®, ȤÀº ¸ðµåÀÇ º¯È¿¡ µû¶ó ¹Ù²îÁö ¾Ê¾Ò´Ù. ÀüÅëÀûÀ¸·Î, st_ctime ´Â inode Á¤º¸¸¦ ¾²°Å³ª ¼³Á¤ÇÔÀ¸·Î½á ¹Ù²î¾ú´Ù.(i.e., owner, group,link count, mode,µîµî).
¾Æ·¡ POSIX ¸ÅÅ©·Î´Â ÆÄÀÏ Å¸ÀÔÀ» È®ÀÎÇÏ´Â °ÍÀÌ´Ù:
¾Æ·¡ flag´Â st_mode ¿µ¿ªÀ» À§ÇØ Á¤ÀÇµÈ °ÍÀÌ´Ù:
S_IFMT | 0170000 | bitmask for the file type bitfields |
S_IFSOCK | 0140000 | socket |
S_IFLNK | 0120000 | symbolic link |
S_IFREG | 0100000 | regular file |
S_IFBLK | 0060000 | block device |
S_IFDIR | 0040000 | directory |
S_IFCHR | 0020000 | character device |
S_IFIFO | 0010000 | fifo |
S_ISUID | 0004000 | set UID bit |
S_ISGID | 0002000 | set GID bit (see below) |
S_ISVTX | 0001000 | sticky bit (see below) |
S_IRWXU | 00700 | mask for file owner permissions |
S_IRUSR | 00400 | owner has read permission |
S_IWUSR | 00200 | owner has write permission |
S_IXUSR | 00100 | owner has execute permission |
S_IRWXG | 00070 | mask for group permissions |
S_IRGRP | 00040 | group has read permission |
S_IWGRP | 00020 | group has write permission |
S_IXGRP | 00010 | group has execute permission |
S_IRWXO | 00007 | mask for permissions for others (not in group) |
S_IROTH | 00004 | others have read permission |
S_IWOTH | 00002 | others have write permisson |
S_IXOTH | 00001 | others have execute permission |
POSIXÀº S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX ºñÆ®¿¡ ´ëÇØ ¼³¸íÇÏÁö ¾ÊÁö¸¸, ´ë½Å S_ISDIR()µîÀÇ ¸ÅÅ©·Î »ç¿ëÀº ¿ä±¸ÇÑ´Ù. À¯´Ð½º V7 (À̳ª ÈÄÀÇ ½Ã½ºÅÛ)Àº POSIX¿¡¼ ±ÔÁ¤ÇÑ À¯»ç¾îÀÎ S_IRUSR, S_IWUSR, S_IXUSR ÀÇ S_IREAD, S_IWRITE, S_IEXEC¸¦ °®´Â´Ù.
hex | À̸§ | ls | octal | ¼³¸í |
f000 | S_IFMT | 170000 | ÆÄÀÏŸÀÔÀ» À§ÇÑ mask | |
0000 | 000000 | SCO out-of-service inode, BSD unknown type | ||
SVID-v2 and XPG2 have both 0 and 0100000 for ordinary file | ||||
1000 | S_IFIFO | p| | 010000 | fifo (named pipe) |
2000 | S_IFCHR | c | 020000 | character special (V7) |
3000 | S_IFMPC | 030000 | multiplexed character special (V7) | |
4000 | S_IFDIR | d/ | 040000 | directory (V7) |
5000 | S_IFNAM | 050000 | XENIX named special file | |
with two subtypes, distinguished by st_rdev values 1, 2: | ||||
0001 | S_INSEM | s | 000001 | XENIX semaphore subtype of IFNAM |
0002 | S_INSHD | m | 000002 | XENIX shared data subtype of IFNAM |
6000 | S_IFBLK | b | 060000 | block special (V7) |
7000 | S_IFMPB | 070000 | multiplexed block special (V7) | |
8000 | S_IFREG | - | 100000 | regular (V7) |
9000 | S_IFCMP | 110000 | VxFS compressed | |
9000 | S_IFNWK | n | 110000 | network special (HP-UX) |
a000 | S_IFLNK | l@ | 120000 | symbolic link (BSD) |
b000 | S_IFSHAD | 130000 | Solaris shadow inode for ACL (not seen by userspace) | |
c000 | S_IFSOCK | s= | 140000 | socket (BSD; also "S_IFSOC" on VxFS) |
d000 | S_IFDOOR | D | 150000 | Solaris door |
e000 | S_IFWHT | w% | 160000 | BSD whiteout (not used for inode) |
0200 | S_ISVTX | 001000 | `sticky bit': save swapped text even after use (V7) | |
reserved (SVID-v2) | ||||
On non-directories: don't cache this file (SunOS) | ||||
On directories: restricted deletion flag (SVID-v4.2) | ||||
0400 | S_ISGID | 002000 | set group ID on execution (V7) | |
for directories: use BSD semantics for propagation of gid | ||||
0400 | S_ENFMT | 002000 | SysV file locking enforcement (shared w/ S_ISGID) | |
0800 | S_ISUID | 004000 | set user ID on execution (V7) | |
0800 | S_CDF | 004000 | directory is a context dependent file (HP-UX) |