Manpages

이 름

gettimeofday, settimeofday − 시 간 을 알 아 내 거 나 설 정 한 다 .

사 용 법

#include <sys/time.h>
#include <unistd.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *
tv , const struct timezone *tz);

설 명

gettimeofdaysettimeofday는 시 간 대 (timezone)과 시 간 을 설 정 할 수 있 다 . tv는 /usr/include/sys/time.h에 정 의 되 어 있 는 timeval 구 조 체 이 다 :

struct timeval {

long

tv_sec; /* 초 */

long

tv_usec; /* 마 이 크 로 초 */

};

tztimezone이 다 :

struct timezone {

int

tz_minuteswest; /* 그 리 니 치 서 측 분 차 (minutes) */

int

tz_dsttime; /* DST 보 정 타 입 */

};

timezone struct 는 사 용 하 지 않 는 다 ; 리 눅 스 에 서 tz_dsttime 필 드 가 사 용 되 지 않 는 다 . - 지 금 까 지 그 렇 고 앞 으 로 도 libc나 glibc에 서 지 원 되 지 않 을 것 이 다 . 커 널 소 스 에 서 (선 언 이 외 에 ) 이 필 드 가 나 오 는 모 든 경 우 는 버 그 이 다 . 그 래 서 다 음 내 용 은 순 수 히 역 사 적 인 흥 미 거 리 다 .

tz_dsttime 필 드 는 Daylight Saving Time(일 광 절 약 시 간 ) 년 도 에 강 제 로 지 정 되 는 상 징 적 인 상 수 값 (아 래 에 있 는 값 들 )을 갖 는 다 . (주 의 : 이 값 은 그 해 동 안 일 정 하 다 . - DST 값 은 강 제 로 지 정 되 지 않 으 며 , 알 고 리 즘 에 서 선 택 된 다 .) Daylight Saving Time 알 고 리 즘 은 아 래 처 럼 정 의 된 다 :

DST_NONE /* dst 사 용 하 지 않 음 */
DST_USA
/* USA 스 타 일 dst */
DST_AUST
/* 오 스 트 레 일 리 아 스 타 일 dst */
DST_WET
/* 서 부 유 럽 dst */
DST_MET
/* 중 부 유 럽 dst */
DST_EET
/* 동 부 유 럽 dst */
DST_CAN
/* 캐 나 다 */
DST_GB
/* 영 국 와 아 일 랜 드 */
DST_RUM
/* 루 마 니 아 */
DST_TUR
/* 터 키 */
DST_AUSTALT
/* 1986의 오 스 트 레 일 리 아 스 타 일 */

물 론 , 이 것 은 Daylight Saving Time 기 간 이 나 라 마 다 단 순 한 알 고 리 즘 으 로 강 제 로 주 어 질 수 없 음 을 말 한 다 : 실 제 로 , 이 기 간 은 정 치 적 이 유 로 결 정 된 다 . 그 래 서 시 간 대 을 표 현 하 는 이 방 법 은 버 려 졌 다 . 리 눅 스 에 서 , settimeofday 시 스 템 콜 의 tz_dsttime 필 드 는 0이 어 야 한 다 .

리 눅 스 에 서 는 , tz 인 자 가 NULL이 아 닌 경 우 나 , tv 인 자 가 NULL이 고 tz_minuteswest 필 드 가 0이 아 닌 인 자 로 settimeofday가 (부 팅 후 ) 처 음 호 출 된 다 면 특 별 한 ’wrap clock’ 의 미 가 있 다 . 그 런 경 우 는 CMOS 시 계 는 로 컬 시 간 이 며 , UTC 시 스 템 시 간 을 얻 기 위 한 시 간 만 큼 증 가 했 음 을 말 한 다 . 의 심 할 여 지 없 이 이 러 한 특 징 을 사 용 하 는 것 은 좋 지 않 다 .

다 음 매 크 로 는 timeval 구 조 체 연 산 을 위 해 정 의 된 다 :

#define timerisset(tvp)\
((tvp)->tv_sec || (tvp)->tv_usec)

#define

timercmp(tvp, uvp, cmp)\

((tvp)->tv_sec cmp (uvp)->tv_sec ||\
(tvp)->tv_sec == (uvp)->tv_sec &&\
(tvp)->tv_usec cmp (uvp)->tv_usec)

#define

timerclear(tvp)\

((tvp)->tv_sec = (tvp)->tv_usec = 0)

만 일 , tvtz가 null이 라 면 , 관 련 구 조 체 는 설 정 되 지 않 거 나 반 환 되 지 않 는 다 .

슈 퍼 유 저 만 이 settimeofday를 사 용 할 수 있 다 .

반 환 값

gettimeofdaysettimeofday 모 두 성 공 하 면 0을 리 턴 하 며 , 실 패 시 에 는 -1을 리 턴 한 다 . (errno는 적 당 한 값 으 로 설 정 된 다 .)

에 러

EPERM

settimeofday가 슈 퍼 유 저 이 외 의 다 른 사 용 자 에 의 해 호 출 되 었 다 .

EINVAL

시 간 대 (또 는 그 외 의 어 떤 것 )가 유 효 하 지 않 다 .

EFAULT

tvtz 중 하 나 가 접 근 할 수 없 는 영 역 을 가 리 키 고 있 다 .

호 환

SVr4, BSD 4.3

관 련 항 목

date(1), adjtimex(2), time(2), ctime(3), ftime(3)

역 자

정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 1일

COMMENTS