2014-09-26 2 views
0

가 디렉토리를 만나면 는 nftw 정의 값 tflag 통과

nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS) 

가 nftw RM은 함수의 tflag 파라미터 5의 값을 전달하고, nftw과 같이하여 디렉토리를 순회하면서. ftw.h 헤더는 tflag 매개 변수에 대해 4 개의 값 (0-3)이있는 열거 형을 지정하며 FTW_D 또는 1이 디렉토리에 적절한 값입니다. fpath 값은 모든 경우에 올바른 것으로 나타납니다.

제 질문은 이것입니다. 왜 tflag에 5가 아닌 1을 전달하고, tflag에 5가 무엇을 의미합니까?

편집 :

값은 (모든 하위 디렉토리가 방문한 한 디렉토리) 사실 FTW_DP이었다 내가 발견하지 못한 환경 의존 부분에 아래 정의 하였다.

+2

[** 헤더 파일의 ** ** 버전] (http://www.scs.stanford.edu/histar/src/pkg/uclibc/include/ftw.h)은 5가'FTW_DP/* 디렉토리에서 모든 하위 디렉토리를 방문했습니다.* /' – jedwards

+0

@jedwards 프로그램을 단계별로 실행하면 그럴 듯합니다. 머리글을 다시 보면 지금 열거 형은 내가 생각한 곳에서 끝나지 않는다는 것을 알 수 있습니다. 그 점을 지적 해 주셔서 감사합니다. –

답변

2

nftw() 의 POSIX 사양은 rm 함수에 플래그 인수 중 하나가 될 것이다 말한다 :

  • FTW_D 목적은 디렉토리입니다.
  • FTW_DNR 개체는 읽을 수없는 디렉터리입니다. fn 함수는 자손에 대해 호출되어서는 안됩니다.
  • FTW_DP 개체는 디렉터리이며 하위 디렉터리를 방문했습니다. (이 조건은 플래그에 FTW_DEPTH 플래그가 포함 된 경우에만 발생합니다.)
  • FTW_F 오브젝트가 디렉토리가 아닌 파일입니다.
  • FTW_NS 적절한 사용 권한이 없기 때문에 개체에서 stat() 함수가 실패했습니다. fn에 전달 된 stat 버퍼는 정의되지 않습니다. stat()가 다른 이유로 실패하면 오류로 간주되고 nftw()는 -1을 반환합니다.
  • FTW_SL 개체는 심볼 링크입니다. 이 조건은 플래그에 FTW_PHYS 플래그가 포함 된 경우에만 발생합니다.
  • FTW_SLN 개체는 기존 파일의 이름을 지정하지 않는 심볼 링크입니다. 합니다 (FTW_PHYS 플래그 플래그에 포함되지 않은 경우이 조건에만 발생된다.)

를 시스템을 식별하지 않는 표준이 플래그 인수와 관련된다 어떤 수를 정의하지 않기 때문에 호출 된 함수는 아무도 시스템에서 5의 의미를 식별 할 수 없습니다. 그러나 5이 값으로보기에는 불충분 한 옵션은 충분합니다.

Mac OS X (10.9.5)에서 5의 값은 FTW_SL이됩니다. OSF를 기반으로 한 또 다른 시스템에서 은 comment5이라는 값은 FTW_DP이고, 따라서 5으로 표시된 플래그는 시스템에 따라 다르다는 것을 충분히 정당화합니다.