scandir
scandir() 은 디렉토리를 스캔하는 api 입니다.
처음 보면 어떻게 사용하는지 알아보기 어렵지만 조금만 해 보면 아주 간단한 api 입니다.
함수원형
보시다시피 아주 복잡하게 되어 있습니다. 함수 포인터를 사용해 보신 분이라면 쉽게 이해가 되실 겁니다.
다시 설명하면
const char *dirp => 검색할 디렉토리 지정
struct dirent **namelist => 검색결과 저장할 dirent 구조체 지정
int(*filter)(const struct dirent *) => 필터 함수 사용할 경우, 사용할 필터 함수 지정
int(*compar)(cont struct dirent **, const struct dirent **) => sort 함수 지정할 경우, 사용할 sort 함수 지정
1. 가장 기본적인 사용예제
필터 함수 사용 : filter() => 직접 만든 함수
소트 함수 사용 : alphasort() => 미리 제공되는 시스템 함수
2. 필터 함수 사용 안할 경우
소트 함수 사용 : alphasort() => 미리 제공되는 시스템 함수
필터 함수를 사용안할 경우 리턴값은 디렉토리 엔트리의 갯수입니다.
3. sort 함수 사용 안할 경우
필터 함수를 사용안할 경우 리턴값은 디렉토리 엔트리의 갯수입니다.
scandir() 은 디렉토리를 스캔하는 api 입니다.
처음 보면 어떻게 사용하는지 알아보기 어렵지만 조금만 해 보면 아주 간단한 api 입니다.
함수원형
#include <dirent.h> scandir(const char *dirp, struct dirent **namelist, int(*filter)(const struct dirent *), int(*compar)(cont struct dirent **, const struct dirent **)); |
보시다시피 아주 복잡하게 되어 있습니다. 함수 포인터를 사용해 보신 분이라면 쉽게 이해가 되실 겁니다.
다시 설명하면
const char *dirp => 검색할 디렉토리 지정
struct dirent **namelist => 검색결과 저장할 dirent 구조체 지정
int(*filter)(const struct dirent *) => 필터 함수 사용할 경우, 사용할 필터 함수 지정
int(*compar)(cont struct dirent **, const struct dirent **) => sort 함수 지정할 경우, 사용할 sort 함수 지정
1. 가장 기본적인 사용예제
필터 함수 사용 : filter() => 직접 만든 함수
소트 함수 사용 : alphasort() => 미리 제공되는 시스템 함수
#include <dirent.h> /* ".", ".." 은 빼고 나머지 파일명 출력하는 필터 함수 */ ᅟstatic int filter(const struct dirent *dirent) { if(!(strcmp(dirent->d_name, ".")) || !(strcmp(dirent->d_name, ".."))){ /* 현재 디렉토리, 이전 디렉토리 표시는 출력안함 */ }else{ printf(" %s() : %s\n", __FUNCTION__, dirent->d_name); } } int main(int argc, char *argv[]) { int ret = 0; struct dirent **filelist; ret = scandir(".", &filelist, *filter, alphasort); return 0; } |
2. 필터 함수 사용 안할 경우
소트 함수 사용 : alphasort() => 미리 제공되는 시스템 함수
필터 함수를 사용안할 경우 리턴값은 디렉토리 엔트리의 갯수입니다.
#include <dirent.h> int main(int argc, char *argv[]) { int ret = 0; int i; struct dirent **filelist; ret = scandir(".", NULL, *filter, alphasort); for(i=0;i<ret;i++){ printf(" %s() : %s\n", __FUNCTION__, filelist[i].d_name); } return 0; } |
3. sort 함수 사용 안할 경우
필터 함수를 사용안할 경우 리턴값은 디렉토리 엔트리의 갯수입니다.
#include <dirent.h> int main(int argc, char *argv[]) { int ret = 0; int i; struct dirent **filelist; ret = scandir(".", NULL, *filter, NULL); for(i=0;i<ret;i++){ printf(" %s() : %s\n", __FUNCTION__, filelist[i].d_name); } return 0; } |
'development' 카테고리의 다른 글
[program] memmove (0) | 2011.10.27 |
---|---|
[kernel] struct list_head (0) | 2011.10.26 |
[kernel] 커널 컴파일 완료후 꼭 해줘야 하는것. (0) | 2011.10.21 |
[kernel] print_hex_dump() api (0) | 2011.10.21 |
[crypto] RFC 3602(AES-CBC 암호화) (0) | 2011.10.20 |