변칙적인 갯수의 인수를 사용하는 함수에 관한 질문입니다.
글쓴이: coco / 작성시간: 화, 2003/09/23 - 2:23오후
어제 그리고 오늘 날씨가 너무 화창해서 사무실에 앉아 있으니깐
졸렵네요.
책을 보다가 잘 이해가 안되서 이렇게 여러분들에게 문의를 드립니다.
제가 궁금한 것은 위의 제목처럼 변칙적인 갯수의 인수를 사용하는 함수에
관련된 부분입니다.
이러한 함수를 사용하기 위해서는 1) stdarg.h가 포함되어야 하고
2) 반드시 va_list형을 선언하고, 3) va_start(), va_end(), va_arg() 함수를
사용하여 함수의 원형에서 정의되지 않은 매개변수를 받아 들이는 것으로
알고 있습니다.
예를 들어 아래의 코드는 sem_open함수의 wrapper 함수입니다.
Sem_open(const char *pathname, int oflag, ...) { sem_t *sem; va_list ap; mode_t mode; unsigned int value; if (oflag & O_CREAT) { va_start(ap, oflag); /* init ap to final named argument */ mode = va_arg(ap, va_mode_t); value = va_arg(ap, unsigned int); if ( (sem = sem_open(pathname, oflag, mode, value)) == SEM_FAILED) err_sys("sem_open error for %s", pathname); va_end(ap); } else { if ( (sem = sem_open(pathname, oflag)) == SEM_FAILED) err_sys("sem_open error for %s", pathname); } return(sem); }
위의 코드에서 보면 원래 sem_open함수는 2개의 파라미터값만을 정확히 명시하고 있고, 위의 코드는 3번째와 4번째를 파라미터로 더 받아 들이고 있는데요,
제가 궁금한것은 3번째 인수와 4번째 인수가 sem_open에서 하는 역활이 무엇인지 궁금합니다.
많은 가르침 부탁 드립니다.
Forums:
댓글 달기