Neoteny

반응형

<개요>

  리눅스에서 파일(혹은 디렉토리)를 탐색하기 위해서는 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

반응형