디렉터리 내용 읽기
디렉터리의 내용을 읽으려면 해당 디렉터리를 열고 정보를 읽을 수 있어야 한다.
디렉터리 열기 : opendir()
- opendir() 함수는 인자로 지정된 디렉터리를 열고 해당 디렉터리에 대한 디렉터리 스트림을 생성, 이 스트림의 포인터를 리턴한다.
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
name : 열고자 하는 디렉터리 명
DIR 객체(opendir() 함수가 디렉터리 열기에 성공하면 반환하는)에는 열린 디렉터리에 정보가 있으며, dirent.h 파일에 typedef struct__dirstream DIR로 정의되어있다. opendir() 함수는 실패하면 NULL을 반환한다.
디렉터리 닫기 : closedir()
- 인자로 지정한 DIR 객체가 가리키는 디렉터리를 닫는다.
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
dirp : 닫으려는 디렉터리를 가리키는 포인터
디렉터리를 닫는데 성공하면 0을, 실패하면 -1을 반환한다.
디렉터리 내용 읽기 : readdir()
- 인자로 지정한 DIR 객체가 가리키는 디렉터리의 내용을 한 번에 하나씩 읽는다. 더 이상 읽을 것이 없으면 NULL을 반환한다.
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
dirp : 정보를 읽어올 디렉터리를 가리키는 DIR 객체
readdir() 함수는 디렉터리에 있는 항목의 정보를 가리키는 dirent 구조체의 포인터를 반환한다.
(dirent 구조체는 sys/dirent.h 파일에 정의되어있음)
struct dirent{
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
unsigned char d_type;
char d_name[256];
};
d_ino : 해당 항목의 inode 번호, d_off : 디렉터리 오프셋의 위치, d_reclen : 해당 항목의 레코드 길이, d_type : 파일 종류, d_name: 항목 이름
디렉터리의 오프셋 이동 : telldir() / seekdir() / rewinddir()
디렉터리를 열고 내용을 읽으면, 디렉터리 스트림에서 현재 내용을 읽고 있는 위치를 나타내는 오프셋 값이 이동한다.
오프셋의 현재 위치를 읽고 옮기는 함수로 telldir(), seekdir(), rewinddir() 이 있다.
#include <sys/types.h>
#include <dirent.h>
long telldir(DIR *dirp);
void seekdir(DIR *dirp, long loc);
void rewinddir(DIR *dirp);
- telldir() : 인자가 가리키는 디렉터리 스트림에서 현재 위치를 반환하며, 실패하면 -1을 반환한다.
- seekdir() : 디렉터리 스트림에서 readdir() 함수가 다음 항목을 읽을 수 있는 곳으로 오프셋을 옮긴다. [인자 loc: telldir() 반환값]
- rewinddir() : 디렉터리 스트림의 위치를 시작 지점으로 옮긴다.
'Fundamental of Software Develop > : : Linux System Programming' 카테고리의 다른 글
Linux System Programming : 파일 접근 권한 제어 (0) | 2023.11.10 |
---|---|
Linux System Programming: 파일 정보 검색 (0) | 2023.11.10 |
디렉터리 관리하기 (위치 검색, 이름 변경, 이동) (0) | 2023.11.09 |
디렉터리 생성과 삭제 : mkdir(), rmdir() (0) | 2023.11.09 |
명령행 인자(Command-Line Arguments) (0) | 2023.11.09 |