[Mini OS 구현] 1. 구조체 (노드) 만들기

검색해보니 리눅스의 파일탐색기 구조는 트리로 되어있다고 한다.

자료구조 알고리즘을 이용하여야 하니,

링크드 리스트 linked-list를 이용하여 LCRS를 통해 구현하기로 했다.

 

노드는 파일 또는 디렉토리이다.

 

구현해야하는 명령어 중에 ls에 -al옵션을 붙여보면 숨겨진 파일을 포함한 세부 정보 리스트를 볼 수 있다.

우선 이 리스트에서 보여주는 정보들 중 구현 가능한 것들을 구조체의 변수로 넣기로 했다.

 

-l 옵션을 하면 아래의 사진처럼 세부 정보를 보여주는데,

변수를 정하기 위해서는 해당 정보들이 무엇을 의미하는지 알 필요가 있다고 느껴 서치해보았다.

 

우선 합계, 구현하기 어려운 부분이라 숫자로 따로 표시하지는 않았지만,

해당 리스에 나오는 파일 폴더들의 사이즈 합을 의미한다.

유형+권한

맨 처음 'd'/'-'

'd'이면 디렉토리, '-'이면 파일을 의미

 

다음 9글자는 3개씩 나누어 순서대로,

읽기(read), 쓰기(write), 실행(excute)에 대한 사용자, 그룹, 그 외의 접근의 권한을 의미

 

chmod 명령어로 변경이 가능하다

chmod는 심볼릭 모드와 절대 모드, 2가지 방법으로 사용할 수 있다.

 

  1) 심볼릭 모드 (Symbolic Mode)

chmod [who] [operator] [permissions] [filename]

[who] 누구의 권한을 바꾸는지

u 소유자
g 그룹
o 소유자와 그룹을 제외한 사용자
a 모든 사용자

[operator]

+ 권한 더하기
- 권한 뺏기
= 권한 주기

[permissions]

r 읽기
w 쓰기
x 실행
s 유저 또는 그룹 set-id
t Sticky 비트
l 파일 잠금 (다른 사용자는 파일 접근 불가)

  2) 절대 모드(Absolute Mode)

chmod [mode] [filename]

[mode]

8진법을 이용해 퍼미션 알파벳에 해당하는 숫자를 더한다

r 4
w 2
x 1

기본적인 퍼미션인 755를 예시로 들자면

7 = 4(r) + 2(w) + 1(x)

5 = 4(r) + 0(w) + 1(x)

이므로,

rwx rwx r-x를 의미한다

 

2. 하드링크 번호

열심히 찾아보기는 했는데 이해가 안돼서 조교님께 질문하니

C언어에서 메모리 주소값과 비슷하다고 생각하면 된다는 답변...

 

 

3. 파일 소유자 아이디

4. 파일 그룹 아이디

5. 파일의 크기

6. 파일 최종 변경 시간

7. 파일 이름

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct node* nptr;
typedef struct node {
	nptr lchild, rsibling;

	char type; //'d': 디렉토리, '-': 파일
	int mode[3]; //접근권한
	char* owner; //소유자
	char* group; //그룹
	struct tm* time; //시간
	char* name; //파일명

	char* contents; //파일인 경우 안의 내용
	int line; //파일 내용 줄글 수


}node;

 

 

 

 

 

728x90