"stat" --- "stat()" 결과 해석하기
*********************************

**소스 코드:** Lib/stat.py

======================================================================

"stat" 모듈은 "os.stat()", "os.fstat()" 및 "os.lstat()"의 (이들이 존재
한다면) 결과를 해석하기 위한 상수와 함수를 정의합니다. "stat()",
"fstat()" 및 "lstat()" 호출에 대한 자세한 내용은 여러분의 시스템 설명
서를 참조하십시오.

버전 3.4에서 변경: stat 모듈은 C 구현으로 지원됩니다.

"stat" 모듈은 특정 파일 유형을 검사하기 위해 다음 함수를 정의합니다:

stat.S_ISDIR(mode)

   mode가 디렉터리로부터 왔으면 0이 아닌 값을 반환합니다.

stat.S_ISCHR(mode)

   mode가 문자 특수 장치(character special device) 파일로부터 왔으면 0
   이 아닌 값을 반환합니다.

stat.S_ISBLK(mode)

   mode가 블록 특수 장치(block special device) 파일로부터 왔으면 0이
   아닌 값을 반환합니다.

stat.S_ISREG(mode)

   mode가 일반 파일로부터 왔으면 0이 아닌 값을 반환합니다.

stat.S_ISFIFO(mode)

   mode가 FIFO(네임드 파이프)로부터 왔으면 0이 아닌 값을 반환합니다.

stat.S_ISLNK(mode)

   mode가 심볼릭 링크로부터 왔으면 0이 아닌 값을 반환합니다.

stat.S_ISSOCK(mode)

   mode가 소켓으로부터 왔으면 0이 아닌 값을 반환합니다.

stat.S_ISDOOR(mode)

   mode가 door로부터 왔으면 0이 아닌 값을 반환합니다.

   버전 3.4에 추가.

stat.S_ISPORT(mode)

   mode가 이벤트 포트(event port)로부터 왔으면 0이 아닌 값을 반환합니
   다.

   버전 3.4에 추가.

stat.S_ISWHT(mode)

   mode가 화이트 아웃(whiteout)으로부터 왔으면 0이 아닌 값을 반환합니
   다.

   버전 3.4에 추가.

파일의 모드(mode)를 보다 일반적으로 조작하기 위한 두 가지 추가 함수가
정의됩니다:

stat.S_IMODE(mode)

   "os.chmod()"로 설정할 수 있는 파일 모드 부분을 반환합니다 ---즉, 파
   일의 권한(permission) 비트, 끈끈한(sticky) 비트, set-group-id 및
   set-user-id 비트 (지원하는 시스템에서).

stat.S_IFMT(mode)

   파일 유형을 기술하는 파일 모드 부분을 반환합니다 (위의 "S_IS*()" 함
   수에서 사용됩니다).

일반적으로, 파일 유형을 검사하는 데 "os.path.is*()" 함수를 사용합니다;
이 함수들은 같은 파일에 대해 여러 개의 검사를 수행하고, 검사마다
"stat()" 시스템 호출 하는 오버헤드를 피하려고 할 때 유용합니다. 또한,
블록과 문자 장치 검사와 같이, "os.path"에서 처리되지 않는 파일에 대한
정보를 확인할 때 유용합니다.

예제:

   import os, sys
   from stat import *

   def walktree(top, callback):
       '''recursively descend the directory tree rooted at top,
          calling the callback function for each regular file'''

       for f in os.listdir(top):
           pathname = os.path.join(top, f)
           mode = os.lstat(pathname).st_mode
           if S_ISDIR(mode):
               # It's a directory, recurse into it
               walktree(pathname, callback)
           elif S_ISREG(mode):
               # It's a file, call the callback function
               callback(pathname)
           else:
               # Unknown file type, print a message
               print('Skipping %s' % pathname)

   def visitfile(file):
       print('visiting', file)

   if __name__ == '__main__':
       walktree(sys.argv[1], visitfile)

파일의 모드를 사람이 읽을 수 있는 문자열로 변환하기 위한 추가 유틸리티
함수가 제공됩니다:

stat.filemode(mode)

   파일의 mode를 '-rwxrwxrwx' 형식의 문자열로 변환합니다.

   버전 3.3에 추가.

   버전 3.4에서 변경: 이 함수는 "S_IFDOOR", "S_IFPORT" 및 "S_IFWHT"를
   지원합니다.

아래의 모든 변수는 단순히 "os.stat()", "os.fstat()" 또는 "os.lstat()"
에 의해 반환된 10-튜플에 대한 기호 인덱스입니다.

stat.ST_MODE

   아이 노드(inode) 보호 모드.

stat.ST_INO

   아이 노드(inode) 번호.

stat.ST_DEV

   아이 노드(inode)가 위치한 장치.

stat.ST_NLINK

   아이 노드(inode)에 대한 링크 수.

stat.ST_UID

   소유자의 사용자 id.

stat.ST_GID

   소유자의 그룹 id.

stat.ST_SIZE

   일반 파일의 크기(바이트); 일부 특수 파일에서는 대기중인 데이터의 양
   .

stat.ST_ATIME

   마지막 액세스 시간.

stat.ST_MTIME

   마지막 수정 시간.

stat.ST_CTIME

   운영 체제에서 보고한 "ctime". (유닉스와 같은) 일부 시스템에서는 마
   지막 메타 데이터 변경 시간이고, (윈도우와 같은) 다른 시스템에서는
   생성 시간입니다 (자세한 내용은 플랫폼 설명서를 참조하십시오).

"파일 크기"의 해석은 파일 유형에 따라 달라집니다. 일반 파일에서는 바이
트로 표현한 파일의 크기입니다. 대부분의 유닉스(특히 리눅스를 포함하는)
의 FIFO와 소켓에서, "크기"는 "os.stat()", "os.fstat()" 또는
"os.lstat()"를 호출한 시점에 읽기 대기 중인 바이트 수입니다; 이것은 때
때로, 특히 비 블로킹으로 연 후에 이러한 특수 파일 중 하나를 폴링할 때
유용할 수 있습니다. 다른 문자와 블록 장치에서 크기 필드의 의미는 하부
시스템 호출의 구현에 따라 더 다양합니다.

아래의 변수는 "ST_MODE" 필드에서 사용되는 플래그를 정의합니다.

첫 번째 플래그 집합을 사용하는 것보다 위의 함수를 사용하는 것이 더 이
식성 있습니다:

stat.S_IFSOCK

   소켓.

stat.S_IFLNK

   심볼릭 링크.

stat.S_IFREG

   일반 파일.

stat.S_IFBLK

   블록 장치.

stat.S_IFDIR

   디렉터리.

stat.S_IFCHR

   문자 장치.

stat.S_IFIFO

   FIFO.

stat.S_IFDOOR

   Door.

   버전 3.4에 추가.

stat.S_IFPORT

   이벤트 포트.

   버전 3.4에 추가.

stat.S_IFWHT

   화이트 아웃(whiteout).

   버전 3.4에 추가.

참고:

  플랫폼이 파일 유형을 지원하지 않으면, "S_IFDOOR", "S_IFPORT" 또는
  "S_IFWHT"는 0으로 정의됩니다.

다음 플래그는 "os.chmod()"의 *mode* 인자에서도 사용할 수 있습니다:

stat.S_ISUID

   Set-user-ID 비트.

stat.S_ISGID

   Set-group-ID 비트. 이 비트는 몇 가지 특별한 용도로 사용됩니다. 디렉
   터리에서는 그 디렉터리가 BSD의 의미가 있음을 나타냅니다: 여기에 만
   들어진 파일은 만드는 프로세스의 유효 그룹 ID가 아니라 디렉터리에서
   그룹 ID를 상속받고, "S_ISGID" 비트 설정도 얻습니다. 그룹 실행 비트
   ("S_IXGRP")가 설정되지 않은 파일의 경우, set-group-ID 비트는 필수
   파일/레코드 잠금을 나타냅니다 ("S_ENFMT"도 참조하십시오).

stat.S_ISVTX

   끈끈한(sticky) 비트. 이 비트가 디렉터리에 설정되면, 해당 디렉터리의
   파일은 파일의 소유자, 디렉터리의 소유자 또는 권한 있는(privileged)
   프로세스에 의해서만 이름이 바뀌거나 삭제될 수 있음을 의미합니다.

stat.S_IRWXU

   파일 소유자 권한(permission) 마스크.

stat.S_IRUSR

   소유자에게 읽기 권한이 있습니다.

stat.S_IWUSR

   소유자에게 쓰기 권한이 있습니다.

stat.S_IXUSR

   소유자에게 실행 권한이 있습니다.

stat.S_IRWXG

   그룹 권한 마스크.

stat.S_IRGRP

   그룹에 읽기 권한이 있습니다.

stat.S_IWGRP

   그룹에 쓰기 권한이 있습니다.

stat.S_IXGRP

   그룹에 실행 권한이 있습니다.

stat.S_IRWXO

   다른 사용자(그룹에 없는)에 대한 권한 마스크.

stat.S_IROTH

   다른 사용자에게 읽기 권한이 있습니다.

stat.S_IWOTH

   다른 사용자에게 쓰기 권한이 있습니다.

stat.S_IXOTH

   다른 사용자에게 실행 권한이 있습니다.

stat.S_ENFMT

   System V 파일 잠금 강제. 이 플래그는 "S_ISGID"와 공유됩니다: 파일/
   레코드 잠금이 그룹 실행 비트("S_IXGRP")가 설정되지 않은 파일에 적용
   됩니다.

stat.S_IREAD

   "S_IRUSR"에 대한 유닉스 V7 동의어.

stat.S_IWRITE

   "S_IWUSR"에 대한 유닉스 V7 동의어.

stat.S_IEXEC

   "S_IXUSR"에 대한 유닉스 V7 동의어.

다음 플래그는 "os.chflags()"의 *flags* 인자에서 사용될 수 있습니다:

stat.UF_NODUMP

   파일을 덤프하지 마십시오.

stat.UF_IMMUTABLE

   파일을 변경할 수 없습니다.

stat.UF_APPEND

   파일은 덧붙이기만 할 수 있습니다.

stat.UF_OPAQUE

   디렉터리는 유니언 스택(union stack)을 통해 볼 때 불투명합니다.

stat.UF_NOUNLINK

   파일의 이름을 변경하거나 삭제할 수 없습니다.

stat.UF_COMPRESSED

   The file is stored compressed (macOS 10.6+).

stat.UF_HIDDEN

   The file should not be displayed in a GUI (macOS 10.5+).

stat.SF_ARCHIVED

   파일을 보관(archive)할 수 있습니다.

stat.SF_IMMUTABLE

   파일을 변경할 수 없습니다.

stat.SF_APPEND

   파일은 덧붙이기만 할 수 있습니다.

stat.SF_NOUNLINK

   파일의 이름을 변경하거나 삭제할 수 없습니다.

stat.SF_SNAPSHOT

   파일은 스냅숏(snapshot) 파일입니다.

See the *BSD or macOS systems man page *chflags(2)* for more
information.

윈도우에서 "os.stat()"에 의해 반환된 "st_file_attributes" 멤버의 비트
를 검사할 때 다음 파일 어트리뷰트 상수를 사용할 수 있습니다. 이러한 상
수의 의미에 대한 자세한 내용은 Windows API documentation을 참조하십시
오.

stat.FILE_ATTRIBUTE_ARCHIVE
stat.FILE_ATTRIBUTE_COMPRESSED
stat.FILE_ATTRIBUTE_DEVICE
stat.FILE_ATTRIBUTE_DIRECTORY
stat.FILE_ATTRIBUTE_ENCRYPTED
stat.FILE_ATTRIBUTE_HIDDEN
stat.FILE_ATTRIBUTE_INTEGRITY_STREAM
stat.FILE_ATTRIBUTE_NORMAL
stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
stat.FILE_ATTRIBUTE_NO_SCRUB_DATA
stat.FILE_ATTRIBUTE_OFFLINE
stat.FILE_ATTRIBUTE_READONLY
stat.FILE_ATTRIBUTE_REPARSE_POINT
stat.FILE_ATTRIBUTE_SPARSE_FILE
stat.FILE_ATTRIBUTE_SYSTEM
stat.FILE_ATTRIBUTE_TEMPORARY
stat.FILE_ATTRIBUTE_VIRTUAL

   버전 3.5에 추가.

윈도우에서, "os.lstat()"이 반환한 "st_reparse_tag" 멤버와 비교하기 위
해 다음 상수를 사용할 수 있습니다. 이것들은 잘 알려진 상수이지만, 완전
한 목록은 아닙니다.

stat.IO_REPARSE_TAG_SYMLINK
stat.IO_REPARSE_TAG_MOUNT_POINT
stat.IO_REPARSE_TAG_APPEXECLINK

   버전 3.8에 추가.
