Provided by: manpages-ko_20050219-2_all bug
        #include <unistd.h>
 
        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),와  trun-
        cate(2).   로  바뀌었다.  전통적으로, st_mtime 는 mknod(2), utime(2),와
        write(2).  로 바뀌었다.  st_mtime 는  소유자,  그룹,  하드링크  카운트,
        혹은 모드의 변효따라 바 . 지 _
 
        전통적으로,    st_ctime    는    inode   정보를   쓰거나   설정함으로써
        바뀌었다.(i.e., owner, group,link count, mode,등등).
 
        아래 POSIX 매크로는 파일 타입을 확인하는 것이다:
 
               S_ISLNK(m)  is it a symbolic link?
 
               S_ISREG(m)  regular file?
 
               S_ISDIR(m)  directory?
 
               S_ISCHR(m)  character device?
 
               S_ISBLK(m)  block device?
 
               S_ISFIFO(m) fifo?
 
               S_ISSOCK(m) socket?
 
        아래 flag는 st_mode 영역을 위해 정의된 것이다:
 
        l  l  l.   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
 
        GID  비트  (S_ISGID)설정은 몇가지 특별한 이용법이 있다: 디렉토리의 경우
        BSD semantic이 쓰이고 있음이 나타낫  생성된  파일은  생성  프로세스와
        생성된  디렉토리의 유효한 gid로부터가 아니라 디렉토리로부터 그들의 그룹
        ID를   상속받는다.    그리고    S_ISGID    비트군을    가진다.     실행
        비트(S_IXGRP)군을  갖지  않은  파일의 경우, mandatory file/record lock-
        ing을 나타낸다.
 
        디렉토리 상의  `sticky'  bit  (S_ISVTX)는  디렉토리안의  파일이  파일의
        소유자, 디렉토리의 소유자, 그리고 루트에 의해 이름을 바뀌거나 지워질 수
        있다는 것을 뜻한다.
        값으로 설정된다.
        ENOENT A  component  of  the  path file_name 경로의 구성요소가 존재하지
               않거나 경로가 빈 문자오甄
 
        ENOTDIR
               경로의 구성요소가 디렉토리가 아니다.
 
        ELOOP  심볼릭링크가 너무 많다.
 
        EFAULT 잘못된 주소이다.
 
        EACCES 권한이 거부됐다.
 
        ENOMEM 메모리 부족.
 
        ENAMETOOLONG
               파일명이 너무 길다.
        lstat  호출은  4.3BSD  and  SVr4에 따른다.  SVr4는 추가적으로 documents
        additional fstat 에러  상태인  EINTR,  ENOLINK,  EOVERFLOW를  문셜했다.
        SVr4  는  추가적으로  stat 와 lstat 의 에러인 EACCES, EINTR, EMULTIHOP,
        ENOLINK, EOVERFLOW를 문셜했다.  st_blocks 와 st_blksize  필드의  사용은
        이식될   수   없다.  (그것들은  POSIX에의해  지정된것이  아니고  BSD에       소개되었다.  해석은 시스템마다 다르고, 싱글 시스템에NFS가  마운트되면
        복잡해진다.)
 
        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를
        갖는다.
        l       l       l       l       l.        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  ordi-
        nary     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 execu-
        tion (V7) 0800 S_CDF          004000    directory is a  context  depen-
        dent file (HP-UX)
 
        sticky 명령은 AT&T UNIX V32에선보였다.