[리눅스 시스템 프로그래밍] 6. 디렉토리

디렉토리 파일은 디렉토리에 속하는 파일들의 이름과 inode 번호로 구성하고 있습니다. 이를 통해 논리적으로 트리 구조를 나타내고 있어요. 그리고 이것은 dirent 구조체를 정의하여 시스템 호출에서 사용하고 있어요.

#include <dirent.h >

struct dirent

{

long d_ino; //inode 번호

off_t d_off; // offset

unsigned short d_reclen; //d_name 길이

char d_name[NAME_MAX+1]; //파일 이름

};

디렉토리 파일에 속하는 파일들은 디렉토리 파일에 dirent 구조체로 관리합니다. 해당 구조체에는 파일의 inode 번호(d_ion)와 현재 디렉토리 시작부터 다음 시작까지의 offset(d_off), 파일 이름(d_name)과 파일 이름의 길이(d_reclen)으로 구성합니다.

 

이러한 디렉토리는 사용자 계정에서는 쓰기 작업을 할 수 없습니다. 실제 디렉토리 파일의 내용을 변경하는 것은 시스템의 고유 권한입니다. 그럼에서 ls 명령을 통해 디렉토리 파일에 권한을 확인하면 읽기, 쓰기, 실행 권한을 모두 갖고 있는 것도 확인할 수 있습니다. 디렉토리 파일에 권한을 확인하였을 때 쓰기 권한은 해당 디렉토리 파일에 다른 파일을 추가하거나 삭제 및 이름 변경 등을 할 수 있다는 의미입니다. 그리고 실행 권한은 해당 디렉토리로 이동할 수 있음을 의미합니다.

 

또한 디렉토리 파일에는 자기 자신(.)과 이전 디렉토리(..)에 관한 디렉토리 엔트리 정보를 갖고 있어요.

[그림 6.1] ls -al 실행 화면
[그림 6.1] ls -al 실행 화면

리눅스 시스템에서는 디렉토리 파일의 생성, 제거 및 디렉토리 파일을 열고 디렉토리 엔트리를 읽는 등의 다양한 시스템 호출을 제공하고 있어요. 이번 장에서는 이러한 디렉토리에 관한 시스템 호출을 살펴볼게요.