2011-11-29 1 views
2

sleep(60)을 무한 루프로 호출하는 프로그램을 작성해야합니다. 루프를 통해 다섯 번마다 현재 시간을 가져와 tm_sec 필드를 인쇄해야합니다.tm t1에 불완전한 타입이있어서 정의 할 수 없습니다.

이 내가 쓴 것입니다 :

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

int main() 
{ 
    struct tm t1; 
    int i=0; 
    for(;;) 
    { 
     sleep(60); 
     if(i%5==0) 
      { 
       gettimeofday(&t1,NULL); 
       printf("%d\n",t1.tm_sec); 
      } 
     i++; 
    } 
} 

내가 aggregate tm t1 has incomplete type and cannot be defined.

나는 내가 잘못 알고하지 않는 없다는 오류를 받고 있어요.

답변

3

struct tm이 아니라 timeval 구조체를 원한다. 이 시도 :

struct timeval t1; 

는 또한, 당신은 t1.tv_sec하지 t1.tm_sec합니다.

+0

나는 구조 timeval 형에 정의되지 않은 tm_sec 필드를 인쇄 할 수 있습니다. – shane

+0

그런 다음 케레 크의 대답을보십시오. –

+0

이렇게하면 코드를 컴파일 할 수는 있지만'tm_sec' 필드를 출력하는 것과 같은 출력을 내주지는 못합니다. –

1

gettimeofday 당신이 tm를 원하는 경우 localtime() 같은, 당신은 <ctime>에서 기능을해야합니다, 1970 년

부터 초 (마이크로 초)로 시간을주고, timeval하지 tm에 대한 포인터를한다, timeval의 초 필드를 변환합니다.

2

틀린 것을 사용하고 있습니다. 다음 두 가지 중 하나를 선택 :

#include <sys/time.h> 

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

또는를 :

#include <time.h> 

char *asctime(const struct tm *tm); 
struct tm *gmtime(const time_t *timep); 
struct tm *localtime(const time_t *timep); 
+0

'time()'또는'gettimeofday()'와 함께 현지 시간을 얻으려면 둘 다 고르고, *와 *는'tm_sec' 필드를 얻기 위해'tm'으로 변환해야합니다. –

+0

마이크로 초를 의미합니까? 'time()'은 이미 두 번째가 아닌 정확합니까? 나는'gettimeofday'가'time'을 완전히 포함한다고 생각했지만, 확실하지 않습니다. –

+0

아니, 당신은 * 둘 다 * 현재 시간을 얻을 수있는 무언가가 필요하다는 것을 의미한다. 당신의 대답은 그러한 것들 중 하나를 골라야한다고 말합니다 - 어떻게 둘 다 문제없이 해결할 수 있습니까? 아니면'time()'이 당신의 대답에 내포되어 있어야한다고 말하고 있습니까? –

관련 문제