시스템 프로그래밍 - 디렉토리 다루기
1. 리눅스 디렉토리
1) 디렉터리
- 파일의 목록을 저장하기 위한 특수한 형태의 파일
(1) 디렉터리 데이터 블록
- 자기 자신의 항
- 부모 디렉터리 가르키는 항
- 자신에게 포함된 파일 목록
- 아이노드 블록의 번호
(2) 계층 구조 - 트리 구조
2) 경로
(1) 절대 경로
- 루트 디렉터리를 기준으로 파일의 위치 표현
- 현재 디렉터리 : .
- 부모 디렉터리 : ..
- 디렉터리 구분 : /(윈도우 운영체제는 ₩ 혹은
\
)
2. 리눅스 디렉터리 관련 함수
1) 디렉터리 생성과 삭제
(1) 디렉터리 생성 : mkdir(2)
- path에 지정한 디렉터리를 mode 권환에 따라 생성
#include <sys/types.h>
#include <sys/stat.h>
int mkdir(const char *path, mode_t mode);
- path : 디렉터리가 포함된 경로
- mode : 접근 권한
(2) 디렉터리 삭제 : rmdir(2)
#include <unistd.h>
int rmdir(const char *path);
2) 디렉터리 관리
(1) 디렉터리 이름 변경 : rename(2)
#include <stdio.h>
int rename(const char *old, const char *new);
- old : 변경할 파일/ 디렉터리 명
- new : 새 파일/ 디렉터리 명
(2) 현재 작업 디렉터리 위치 : getcwd(3)
- 디렉터리 작업 위치 알아낼 때 사용
- 현재 작업 위치 명령 : pwd
실패시 : NULL 리턴
- 버퍼 주소가 NULL 이면 getcwd()는 직업 mallco으로 메모리 할당하고 주소 리턴
(3) 디렉터리 이동 : chdir(2)
- 프로그램에서 디렉터리 이동시 사용
- 리눅스 명령어 : cd
#include <unistd.h>
int chdir(const char *path);
3) 디렉터리 정보 검색
(1) 디렉터리 열기 : opendir(3)
- 지정한 디렉터리를 읽기 전용으로 연다.
- 성공 시 dir 포인터 리턴, 실패시 NULL 리턴
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *dirname);
(2) 디렉터리 닫기 : closedir(3)
- 지정한 DIR 포인터가 가르키는 디렉터리 닫음
- 성공 시 0, 실패 시 -1리턴
#include <sys/types.h>
#include <direct.h>
int clodedir(DIR *dirp);
- dirp : 닫으려는 디렉터리를 가르키는 포인터
(3) 디렉터리 정보 읽기 : readdir(3)
- 지정한 DIR 포인터가 가르키는 디렉터리 내용을 한번에 하나씩 읽음
- 성공 시 디렉터리 내용을 하나씩 읽음, 실패시 NULL을 리턴
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
- dirp : 정보를 읽어올 디렉터리를 가르키는 포인터
- dirent.h 구조체는 sys/dirent.h에 정의
(4) 디렉터리 오프셋 : telldir(3), seekdir(3), rewinddir(3)
- 파일 오프셋 / 디렉터리 오프셋
- 디렉터리 열고, 정보 읽을시 이동
- telldir : 디렉터리 오프셋의 현재 위치를 알려줌
- Seekdir : 디렉터리 오프셋을 loc에 지정한 위치로 이동시킴
- rewinddir : 디렉터리 오프셋을 디렉토리의 시작인 0으로 이동시킴
3. 윈도우에서 리눅스의 디렉터리 개념과 같은 개념
- 디렉터리 : 파일의 목록을 저장하기 위한 특수한 형태의 파일
- 디렉터리 데이터 블록 - 트리구조 : 절대 경로와 상대경로로 구분 윈도우에서는 폴더와 같은 개념
댓글남기기