Rechercher une page de manuel

Chercher une autre page de manuel:

stat

Autres langues

Langue: ko

Version: May 13, 1998 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

이름

stat, fstat, lstat - 파일 상태를 얻는다

사용법

#include <sys/types.h>
#include <sys/stat.h>
#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);

설명

이 함수는 지정된 파일에 대한 정보를 반환한다. 이 정보를 얻기 위해 필요한 접근 권한은 없지만, 파일을 읽는 경로에 있는 모든 디렉토리에 대한 탐색 권한이 필요하다.

statfile_name 으로 지정된 파일에 대해 설명하고 buf 에 채운다. lstatstat 와 동일시된다.링크는 그 자체로 설명된다, 링크에 포함되어 있는 파일을 설명하지 않는다. 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_atimemknod(2), utime(2), read(2), write(2),와 truncate(2). 로 바뀌었다. 전통적으로, st_mtimemknod(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 영역을 위해 정의된 것이다:

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 locking을 나타낸다. 디렉토리 상의 `sticky' bit (S_ISVTX)는 디렉토리안의 파일이 파일의 소유자, 디렉토리의 소유자, 그리고 루트에 의해 이름을 바뀌거나 지워질 수 있다는 것을 뜻한다.

반환값

성공시, 0이 반환되고, 실패시, -1이 반환된다. 그리고 errno 는 적절한 값으로 설정된다.

에러

EBADF
filedes 는 잘못됐다.
ENOENT
A component of the path file_name 경로의 구성요소가 존재하지 않거나 경로가 빈 문자열이다.
ENOTDIR
경로의 구성요소가 디렉토리가 아니다.
ELOOP
심볼릭링크가 너무 많다.
EFAULT
잘못된 주소이다.
EACCES
권한이 거부됐다.
ENOMEM
메모리 부족.
ENAMETOOLONG
파일명이 너무 길다.

호환

statfstat 호출은 SVr4, SVID, POSIX, X/OPEN, BSD 4.3에 따른다. lstat 호출은 4.3BSD and SVr4에 따른다. SVr4는 추가적으로 documents additional fstat 에러 상태인 EINTR, ENOLINK, EOVERFLOW를 문서화했다. SVr4 는 추가적으로 statlstat 의 에러인 EACCES, EINTR, EMULTIHOP, ENOLINK, EOVERFLOW를 문서화했다. st_blocksst_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를 갖는다.

타 시스템

다양한 시스템에서 사용되는 값들:
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)
sticky 명령은 AT&T UNIX V32에서 선보였다.

관련 항목

chmod(2), chown(2), readlink(2), utime(2)
BEOS est merdique. Il se télécharge et fait 50 mégas et n'est pas
compatible Windows. Même si il met un lien sur le bureau de Windows pour
le lancer, on doit redémarrer la machine pour passer d'un système à
l'autre alors que le multidesk ne doit pas etre installé et peut avoir
aussi un lien sur le bureau de Windows, mais avec lui on peut swapper
entre le Multidesk et Windows via la touche ALT-TAB.
-- Jayce - Il me semblait l'avoir pourtant dit, que BeOS ça su><e --