300x250
리눅스 C언어 (파일 목록 읽어내기)
리눅스 디렉터리 구조체 struct dirent
헤더 파일 dirent.h에는 디렉터리의 구조를 구조체 dirent로 정의하고 있다.
struct dirent {
long d_ino; //I-노드 번호
off_t d_off; //offset
unsigned short d_reclen; //파일 이름 길이
char d_name[NAME_MAX+1]; //파일 이름
}
디렉터리 파일을 읽어 내려면 단순히 파일을 열어 저장된 구조체를 하나씩 읽으면 된다.
삭제된 파일의 i-노드 번호가 0이 된다.
opendir 함수는 변수 dirname에 지정된 디렉토리 스트림을 열어 처음을 가리킨다.
함수
#include <dirent.h>
DIR *opendir(const char *dirname);
반환값
- 성공 시 : 디렉토리 스트림의 포인터
- 실패 시 : NULL
reanddir 함수는 dirp가 가리키는 디렉토리 내 파일 목록의 주소를 반환하고, dirp는 다음 파일목록으로 이동한다.
삭제한 파일 i-node 0 파일은 파일목록의 출력을 하면 안된다.
함수
#include<dirent.h>
struct dirent *readdir(DIR *dirp);
반환값
- 성공 시 : 파일 정보가 담긴 dirent 구조체
- 실패 시 : NULL
closedir 함수는 디렉토리 파일을 닫아 준다.
함수
#include <dirent.h>
int closedir(DIR* dp);
반환값
- 성공 시 : 0
- 실패 시 : -1
<코드>
#include<dirent.h>
#include<stdio.h>
DIR *dp;
struct dirent *dir;
main()
{
if((dp = opendir(".")) == NULL){
fprintf(stderr,"directory open error\n");
exit(-1);
}
while((dir = readdir(dp)) != NULL){
if(dir->d_ino == 0) continue;
printf("파일이름 : %s\t, I-node : %d\n", dir->d_name, dir->d_ino);
}
closedir(dp);
}
<출력 결과>
반응형
'C & Docker & LINUX' 카테고리의 다른 글
리눅스 커널 컴파일 (0) | 2017.04.25 |
---|---|
c언어 - stdout, stderr의 차이점 (0) | 2016.10.11 |
리눅스 쉘 스크립트 예제(alias, csh, 구구단, 피보나치수열) (4) | 2016.10.07 |
alias를 이용하여 파일 휴지통 이동(mv, rm) (0) | 2016.10.04 |
C언어 - 하노이탑 (0) | 2016.06.10 |