2013-09-16 3 views
0
#include "stdlib.h" 
#include "sys/stat.h" 
#include "stdio.h" 

int main(){ 
    struct stat s; 
    lstat("../", &s); 
    if(S_ISDIR(s.st_mode) == 0){ 
      printf("yes\n"); 
    }else{ 
      printf("no\n"); 
    } 
} 

결과 : "NO"C : S_ISDIR이 디렉토리를 인식하지 않는 이유는 무엇입니까?

I (예를 들어 S_ISREG 포함)이 코드의 다른 변이를 실행하면 내가 때마다 기대의 반대를 얻을.하지 S_ISREG가 "../"이면 "예"가됩니다. 나는 이런 종류의 것들 (파일 권한, 디렉토리 생성 등)을 잠깐 망쳐 놓았 기 때문에 내가 무엇인가를 망쳤는지 모르겠다. 어떤 도움을 주시면 감사하겠습니다.

+0

답변이어야합니다. –

+0

무엇을 의미합니까? 이것이 작동해야하거나 현재 나에게 정확한 답을주고 있습니까? – user2784872

+0

@ user2784872 : 답변을 게시하기 전에 댓글을 달았습니다. R은이를 언급했습니다. – Mat

답변

0

S_ISDIR을 잘못 사용하고 있습니다. 디렉토리가있는 경우 으로 표시되고 이면 인 0으로 테스트됩니다.

교체 그와 :

S_ISREG 같은 다른 매크로에 대한
if(S_ISDIR(s.st_mode)){ 
     printf("yes\n"); 
}else{ 
     printf("no\n"); 
} 

동일합니다. 다음의 매크로 파일이 지정된 유형인지 여부를 테스트 할 수 있어야한다

:

이 매크로에 대한 표준 참조 sys/stat.h이 말한다 POSIX입니다. 매크로에 제공되는 값 m은 stat 구조체의 st_mode 값입니다. 매크로가 테스트가 참이면 0이 아닌 값으로 평가됩니다.; 테스트가 거짓이면 0입니다.

[...]은 디렉토리
S_ISDIR(m)
  시험.
[...]

+0

나는 당신을 믿지 않는다고 말하는 것이 아니라 이전에 일하고 있었다. 또한 man 페이지와 [this] (http://linux.die.net/man/2/stat)는 true이면 0이 반환된다고 말합니다. – user2784872

+0

해당 페이지에서 0을 반환하는 것으로 나타 났습니까? 여전히 의심이들 경우를 대비하여 공식 표준 참조를 추가했습니다. – Mat

+0

와우. 내 잘못이야. 반환 값을 매크로에 기인 한 것 같았습니다 ... 바보처럼. 정말 고마워. – user2784872

관련 문제