본문 바로가기
임베디드/s3c2240mini (X35)

[C언어] PC의 UNIX 시간 & S3C2440Mini UNIX 시간

by 호군 2011. 10. 18.
반응형
 1. PC's UNIX Time
 코드
#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[]) {
    time_t local = 0;
    int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
    int ret = stime(&local);
  
    while(1) {
        (void) time(&local);
        time_struct = localtime(&local);

        year = time_struct->tm_year + 1900;
        month = time_struct->tm_mon + 1;
        day = time_struct->tm_mday;
        hour = time_struct->tm_hour;
        minute = time_struct->tm_min;
        second = time_struct->tm_sec; 

        printf("local --> %d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second);
        usleep(1000000);
    }
}

 결과
local --> 1970-1-1 9:0:0
local --> 1970-1-1 9:0:1
local --> 1970-1-1 9:0:2
local --> 1970-1-1 9:0:3
local --> 1970-1-1 9:0:4
...
 int stime(time_t) 함수의 첫번째 매개변수에 0을 준다면, '1970년 1월 1일 9시' 시간을 얻는다.
참으로 정상적인 값이 들어와 준다.

2. S3C2440Mini's UNIX Time
 코드

 '1. PC's UNIX Time'와 코드 동일.

 결과
local --> 1969-12-31 16:0:0
local --> 1969-12-31 16:0:1
local --> 1969-12-31 16:0:2
local --> 1969-12-31 16:0:3
local --> 1969-12-31 16:0:4
...
 S3C2440Mini 개발 보드에서 int stime(time_t) 함수의 첫번쨰 매개변수에 0을 준다면, '1969년 12월 31일 16시' 시간을 얻는다. 코드는 같지만, 결과 값이 다른 것을 보여준다.
 왜 이런 검사를 하게 된 이유는 time_t mktime(struct tm*) 함수를 사용하면 -1이 반환되기 때문이다. struct tm 타입의 시간 데이터로 second 값으로 반환해줘야 하는데 해주지를 않는다. google에서 mktime() 함수 코드를 보면 overflow가 발생 할 경우 -1을 반환하는 것 같다. 그외에 여러 데이터 값으로 테스트를 했지만 결과는 같았다.


어쩔 수 없이 직접 stime()의 첫번째 매개변수에 들어갈 값을 계산 해줘야 할 듯 하다. 그래서 '1969-12-31 16:0:0' 을 0이라고 가정하고 second를 계산해서 stime()에 설정 할 것이다.
반응형