<개요>
리눅스에서 파일(혹은 디렉토리)를 탐색하기 위해서는 ftw와 nftw 함수를 사용하면 된다.
<필요한 파일>
ftw.h 파일이 필요하다.
함수를 사용하기 전에 include 해 두기 바란다.
#include <ftw.h>
<프로토 타입>
프로토 타입은 다음과 같으며 콜백 함수를 이용하므로 함수 포인터가 포함되어 있다.
int ftw ( const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int depth);
int nftw ( const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag, struct FTW *s), int depth, int flags);
<콜백 함수 작성>
int list_file( const char* filename, const struct stat* status, int type )
{
// type 값 의미
// FTW_F : 일반적인 화일이다.
// FTW_D : 디렉토리이다.
// FTW_DNR : 읽을 수 없는 디렉토리이다.
// FTW_SL : 심볼릭 링크이다.
// FTW_NS : (모르겠다.)
// return 값의 의미
// 0이 아닌 값을 리턴하면 ftw 함수가 종료된다.
return 0;
}
<인자>
dir : 탐색을 시작한 디렉토리의 위치이다.
fn : 탐색중 발견한 파일의 정보를 되돌려줄 콜백 함수 포인터이다.
depth : 디렉토리를 여는 개수를 설정한다.
return : 0이면 성공이며 -1이면 에러이다.
<주의사항>
ftw 함수는 동적 할당을 사용하므로 반드시 안전하게 종료시키기 위해서는 콜백 함수가 0이 아닌 값을 리턴하는 방법으로 종료시켜야 한다.
<예제>
#include <ftw.h>
#include <sys/stat.h>
#include <stdio.h>
int list(const char* name, const struct stat* status, int type)
{
if(type == FTW_NS)
return 0;
printf("%-30s\t%o\n", name, status->st_mode & 0777);
return 0;
}
int main(int argc, char* argv[])
{
return ftw((argc==1 ? "." : argv[1]), list, 1);
}
<출처>
리눅스 매뉴얼
매뉴얼을 보기 위해서는 프롬프트에서 다음과 같이 입력하면 된다.
#man ftw