[컴퓨터공학]/[시스템 프로그래밍]

[시스템 프로그래밍] 파일 정보 검색(1) - inode 정보 검색

딥러닝 도전기 2022. 10. 15. 04:54

[시스템 프로그래밍] 파일 정보 검색(1) - inode 정보 검색

 

inode에는 파일에 관한 자세한 정보가 저장되어 있습니다. inode는 index-node의 줄임말로, 각 파일마다 고유한 inode값을 가지고 있으며, 파일 형식, 소유자, 그룹, 권한 모드 등 해당 파일에 대한 정보를 가지고 있습니다. 파일 시스템 내의 파일은 inode 값을 통해 식별이 가능합니다.

 

아래의 그림은 inode의 파일 모드에 관한 그림입니다. 총 16비트의 flag를 가지며, 각 비트에 해당하는 값은 아래와 같습니다.

inode는 파일 모드 뿐 만 아니라, 링크 수, 소유자 ID, 그룹 ID, 파일 크기, 파일 주소, 마지막 접근, 마지막 수정, inode 수정 시간 등의 정보를 담고 있습니다.

 

inode의 정보는 stat함수와 fstat함수, lstat함수를 통해 검색할 수 있습니다. lstat 함수는 심볼릭 링크 파일의 inode를 검색하는 함수입니다.

 


먼저, stat 함수에 대해 살펴보도록 하겠습니다.

man -s 2 stat

man 명령어를 통해 stat함수를 출력한 결과입니다.

stat 함수는 path, buf 라는 두 개의 parameter를 받습니다. 

  • path : 정보를 얻고자 하는 파일 명
  • buf : 검색한 파일의 정보를 저장할 구조체 주소

stat 함수로 파일의 정보를 검색할 때 파일에 대한 읽기/쓰기/실행 권한이 반드시 있어야 하는 것은 아닙니다. 다만, 파일에 이르는 경로의 각 디렉토리에 대한 읽기 권한은 반드시 있어야 합니다.

 

다음으로 stat 구조체에 대해 알아보겠습니다.

 

struct stat {
     dev_t           st_dev;        /*ID of device containing file */

     ino_t            st_ino;          /*inode number*/

     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 ID (if special file)*/

     off_t             st_size;         /*total size, in byte*/

     blksize_t      st_blksize;    /*blocksize for file system I/O*/

     blkcnt_t       st_blocks;     /*number of 512B blocks allocated*/

     time_t;        st_atime;      /*time of last access*/

     time_t;        st_mtime;     /*time of last modification*/

     time_t         st_xtime;       /*time of last status change*/

};

 

  • st_dev : inode가 저장되어 있는 장치의 장치 번호를 저장한다.
  • st_ino : 해당 파일의 inode 번호를 저장한다.
  • st_mode : 파일의 형식과 접근 권한을 저장한다.
  • st_nlink : 하드 링크의 개수를 저장한다.
  • st_uid : 파일 소유자의 UID(User ID)를 저장한다.
  • st_gid : 파일 소유자의 GID(Group ID)를 저장한다.
  • st_rdev : 장치 파일이면 주 장치번호와 부 장치번호를 저장한다. 장치 파일이 아니면 의미없음.
  • st_atime : 마지막으로 파일을 읽거나, 실행한 시각을 저장한다. 이때, 시각은 1970년 1월 1일 00시 기준으로 초 단위를 저장한다.
  • st_mtime : 파일을 마지막으로 수정한 시각을 저장한다.
  • st_ctime : 마지막으로 inode의 내용을 변경한 시각을 저장한다. (inode의 내용은 소유자/그룹 변경, 파일 크기 변경, 링크 개수 병경 등을 수행할 때 변경된다.)
  • st_blksize : 파일의 내용을 입출력할 때 사용하는 버퍼의 크기를 저장한다.
  • st_blocks : 파일을 512바이트씩 블록으로 나눈 개수를 저장한다.
  • st_fstype : 파일 시스템 종류 정보를 저장한다.

 

- stat 관련 예제 -

line 6 : struct stat의 buf 선언

line 11~22 : buf에 저장된 파일의 정보를 출력

 

임의의 "unix.txt" 파일을 만든 후 해당 프로그램을 실행한 결과는 다음과 같습니다.

 

다음으로 fstat 함수를 알아보도록 하겠습니다.

stat함수에서 파일 경로를 사용했다면, fstat함수에서는 파일 기술자(file descriptor)를 사용합니다. 

 

man -s 2 fstat

man 명령어를 통해 fstat 함수를 살펴보면, parameter로 fildes(file descriptor)와 buf를 받고, 나머지 사항은 stat과 동일합니다.

fstat 함수를 통해 "unix.txt"파일의 정보를 읽어오는 예제입니다.

위에서 살펴본 stat 예제와 출력 내용은 동일하지만, 파일을 읽어오는 함수를 stat에서 fstat으로 변경했습니다.

출력 결과는 "unix.txt" 파일을 생성한 시각을 제외하고 동일합니다.

 이상으로 파일 정보 검색에 대한 첫 번째 내용인 inode, stat, fstat에 관한 포스팅을 마치도록 하겠습니다.

반응형