File.Stat
File.Stat
파일에 대한 정보를 담고 있는 struct예요. Erlang에서는 이 struct가 :file_info 레코드로 표현되기 때문에, 이 모듈은 Erlang 레코드와 Elixir struct 사이를 변환하는 함수도 함께 제공해요.
출처: File.Stat
본문
File.stat/2 같은 함수로 파일 정보를 조회하면 이 struct를 얻게 돼요. 필드를 하나씩 살펴보면 파일이 어떤 모습인지 상세히 알 수 있어요.
size— 파일의 크기(바이트 단위)예요.type— 파일의 종류예요.:device,:directory,:regular,:other,:symlink중 하나예요.access— 현재 시스템이 파일에 접근할 수 있는 권한이에요.:read,:write,:read_write,:none중 하나예요.atime— 파일을 마지막으로 읽은 시간이에요.mtime— 파일을 마지막으로 쓴 시간이에요.ctime— 이 시간 필드의 해석은 운영체제에 따라 달라져요. Unix 계열에서는 파일이나 inode를 마지막으로 변경한 시간이고, Windows에서는 파일을 생성한 시간이에요.mode— 파일 권한이에요.links— 이 파일을 가리키는 링크의 개수예요. 링크 개념이 없는 파일 시스템에서는 항상 1이에요.major_device— 파일이 있는 파일 시스템을 식별해요. Windows에서는 숫자가 드라이브를 뜻해요. 0은 A:, 1은 B:를 의미하죠.minor_device— Unix 계열 시스템의 문자 장치(character device)에서만 유효해요. 그 외의 경우에는 0이에요.inode— inode 번호를 알려줘요. Unix 계열이 아닌 파일 시스템에서는 0이에요.uid— 파일의 소유자를 나타내요. Unix 계열이 아닌 파일 시스템에서는 0이에요.gid— 파일을 소유한 그룹을 나타내요. Unix 계열이 아닌 파일 시스템에서는 0이에요.
atime, mtime, ctime에 담기는 시간 타입은 옵션에서 설정한 시간 타입에 따라 달라져요. {:time, type} 형태로 주는데, type은 :local, :universal, :posix 중 하나이고 기본값은 :universal이에요.
주요 타입
t/0 타입은 위 필드들을 모두 담고 있어요. 특히 시간 필드는 :calendar.datetime/0이거나 정수이거나 :undefined일 수 있는 걸 볼 수 있어요.
@type t() :: %File.Stat{
access: :read | :write | :read_write | :none | :undefined,
atime: :calendar.datetime() | integer() | :undefined,
ctime: :calendar.datetime() | integer() | :undefined,
gid: non_neg_integer() | :undefined,
inode: non_neg_integer() | :undefined,
links: non_neg_integer() | :undefined,
major_device: non_neg_integer() | :undefined,
minor_device: non_neg_integer() | :undefined,
mode: non_neg_integer() | :undefined,
mtime: :calendar.datetime() | integer() | :undefined,
size: non_neg_integer() | :undefined,
type: :device | :directory | :regular | :other | :symlink | :undefined,
uid: non_neg_integer() | :undefined
}
변환 함수
이 모듈은 Erlang 레코드와의 변환을 돕는 두 함수를 제공해요.
from_record(file_info)—:file_info레코드를File.Statstruct로 변환해요.
@spec from_record(:file.file_info()) :: t()
to_record(stat)—File.Statstruct를:file_info레코드로 변환해요.
@spec to_record(t()) :: :file.file_info()
Erlang의 :file 모듈과 함께 작업할 때 이 변환 함수들이 경계를 매끄럽게 이어줘요.
더 알아보기
- 파일 정보를 얻는
File.stat/2함수와 함께 살펴보면 활용 흐름이 분명해져요. - Erlang 쪽 표현인
:file_info레코드는:file모듈 문서에서 확인할 수 있어요. - 시간 옵션(
{:time, type})의 자세한 동작은File.stat/2문서를 참고해 보세요.