이 름
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);
설 명
gettimeofday와 settimeofday는 시 간 대 (timezone)과 시 간 을 설 정 할 수 있 다 . tv는 /usr/include/sys/time.h에 정 의 되 어 있 는 timeval 구 조 체 이 다 :
struct timeval {
long | |||
tv_sec; /* 초 */ | |||
long | |||
tv_usec; /* 마 이 크 로 초 */ |
};
tz는 timezone이 다 :
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)
만 일 , tv나 tz가 null이 라 면 , 관 련 구 조 체 는 설 정 되 지 않 거 나 반 환 되 지 않 는 다 .
슈 퍼 유 저 만 이 settimeofday를 사 용 할 수 있 다 .
반 환 값
gettimeofday와 settimeofday 모 두 성 공 하 면 0을 리 턴 하 며 , 실 패 시 에 는 -1을 리 턴 한 다 . (errno는 적 당 한 값 으 로 설 정 된 다 .)
에 러
EPERM |
settimeofday가 슈 퍼 유 저 이 외 의 다 른 사 용 자 에 의 해 호 출 되 었 다 . | ||
EINVAL |
시 간 대 (또 는 그 외 의 어 떤 것 )가 유 효 하 지 않 다 . | ||
EFAULT |
tv나 tz 중 하 나 가 접 근 할 수 없 는 영 역 을 가 리 키 고 있 다 . |
호 환
SVr4, BSD 4.3
관 련 항 목
date(1), adjtimex(2), time(2), ctime(3), ftime(3)
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 1일