파일 시스템
- 파일 시스템의 구현
- 파일 상태 정보
- 디렉터리
- 링크
목표
- 디렉터리 개념에 대해 간단하게 이해한다.
- 디렉터리 엔트리 구조체에 대해 이해하고 구조들을 살펴본다.
- 디렉터리의 구현 및 작동에 대한 이해
디렉터리 개념이란?
- 디렉터리는 일종의 파일이다.
- 디렉터리는 여러 관련 파일과 부디렉토리를 저장하는 파일이다.
- 디렉토리는 디렉토리 엔트리들로 구성된다.
디렉터리 엔트리 구조체
- 디렉터리 : 파일과 부 디렉터리를 저장하는 파일
- 엔트리 : 참가자 명단. 즉 (파일 + i+node 번호)
디렉터리 엔트리 구조체 확인하기
- 디렉터리 엔트리 구조체를 확인하기 위해 필요한 함수 2개
- opendir()
- 디렉터리 열기 함수
- 열기를 성공하면 DIR 구조체 포인터, 실패 시 NULL 리턴
- readdir()
- 디렉터리 읽기 함수
- 한 번에 디렉터리 엔트리를 하나씩 읽어서 리턴
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
/* 디렉터리 내의 파일 이름들을 리스트한다. */
int main(int argc, char **argv)
{
DIR *dp;
char *dir;
struct dirent *d;
struct stat st;
char path[BUFSIZ+1];
if (argc == 1)
dir = "."; // 현재 디렉터리를 대상으로
else dir = argv[1];
if ((dp = opendir(dir)) == NULL) { // 디렉터리 열기
perror(dir);
exit(1);
}
while ((d = readdir(dp)) != NULL) // 디렉터리 내의 각 엔트리에 대해
printf("%s %d \n", d->d_name, d->d_ino); // 파일 이름 프린트
closedir(dp);
exit(0);
}
디렉터리 작동 및 구현의 이해
- 디렉터리는 여러 엔트리로 구성되어있다
- /의 inode는 2, bin의 inode는 3, user의 inode는 4, ls의 inode는 5, cp의 inode는 7, test.c의 inode가 6인 디렉터리가 있다고 가정하자
- 맨 처음 /의 노드 번호인 2에 접근한다
- 블록 포인터가 가지고 있는 값이 200이므로 200에 접근한다.
- usr의 노드 번호인 4에 접근한다.
- 블록 포인터가 가지고 있는 값이 202이므로 202번에 접근한다.
- 의 노드 번호인 4에 접근한다.
- 블록 포인터가 가지고 있는 값이 202이므로 202번에 접근한다.
- 원하는 값인 test.c가 들어있다.
정리 및 느낀 점
- 디렉터리는 파일과 i-node로 이루어진 파일이다.
참조
- 창병모, 리눅스 프로그래밍, 생능출판사, 2014.