2014-03-02 2 views
3

저는 유닉스 환경에서 고급 프로그래밍을 읽기 시작했습니다. 첫 번째 예제는 ls 구현을위한 코드입니다. 내가 이해할 수없는 유일한 것은 DIR이 정의 된 곳입니다. 나는 apue.h (거기 있지 않음)와 dirent.h (거기 있지 않은)에서 보았다. 아무도 그것이 정의 된 곳을 말해 줄 수 있습니까?DIR은 어디에 정의되어 있습니까?

#include "apue.h" 
#include <dirent.h> 
#include <stdlib.h> 

int 
main(int argc, char *argv[]) 
{ 
DIR    *dp; 
struct dirent *dirp; 

if (argc != 2) 
    err_quit("usage: ls directory_name"); 

if ((dp = opendir(argv[1])) == NULL) 
    err_sys("can't open %s", argv[1]); 
while ((dirp = readdir(dp)) != NULL) 
    printf("%s\n", dirp->d_name); 

closedir(dp); 
exit(0); 
+4

어떤 플랫폼을 사용하고 계십니까? 리눅스에서는 dirent.h에있다 :'typedef struct __dirstream DIR'. 당신은'grep DIR /usr/include/*.h /usr/include/*/*.h |를 실행할 수있다. grep typedef '를 찾아보십시오. 응답에 대해 – isedev

+0

주셔서 감사합니다. 내 시스템의 apr_portable.h에 있었다. – user3233706

+0

@isedev :보다 간단하게 :'grep -r 'typedef. * DIR'/ usr/include' 또는 find/usr/include -type f -name '* .h'| xargs grep 'typedef. * DIR' –

답변

1

DIRopaque data type이며, 당신은 단지 그것의 정의에 슬쩍하지 않는, 그것을 사용하고자 할 때 의미 하나처럼 취급해야한다. 당신이 그들을 사용 당신의 터미널에 man opendir을 실행하는 방법을 알고 싶다면

DIR는, opendir() 함께 제공 opendir()의 사용 설명서는 포함해야 당신에게

  1. 하는 헤더 파일을 말할 것이다
  2. 은 그 함수의 프로토 타입 무엇인가 그 함수의 반환 값을 처리하는 방법을

및 훨씬 더.

관련 문제