2016-09-11 2 views
1

Итак, я знаю, как печатать время с эпохи в секундах и, очевидно, даже миллисекунды, но когда я пробую наносекунды, я все время получаю фиктивный вывод целого числа, которое слишком мало и иногда печатает цифры меньшими чем последний прогон.Время печати с эпохи в наносекундах

#include <stdio.h> 
#include <time.h> 

int main (void) 
{ 
    long int ns; 
    struct timespec spec; 

    clock_gettime(CLOCK_REALTIME, &spec); 
    ns = spec.tv_nsec;; 

    printf("Current time: %ld nonoseconds since the Epoch\n", ns); 
    return 0; 
} 

Например, с пробегом из этого я получил 35071471 наносекунды с эпохи.

Любая помощь в получении этого для правильного отображения будет оценена по достоинству.

ответ

2

Наносекундная часть - это просто «дробная» часть, вам также нужно добавить секунды.

// otherwise gcc with option -std=c11 complaints 
#define _POSIX_C_SOURCE 199309L 
#include <stdio.h> 
#include <time.h> 
#include <stdint.h> 
#include <inttypes.h> 
#define BILLION 1000000000L 
int main(void) 
{ 
    long int ns; 
    uint64_t all; 
    time_t sec; 
    struct timespec spec; 

    clock_gettime(CLOCK_REALTIME, &spec); 
    sec = spec.tv_sec; 
    ns = spec.tv_nsec; 

    all = (uint64_t) sec * BILLION + (uint64_t) ns; 

    printf("Current time: %" PRIu64 " nanoseconds since the Epoch\n", all); 
    return 0; 
} 
+0

Спасибо, гораздо более полезным, чем странице информации по теме ... –

+0

Еще одна вещь, это можно отливать 'all' как' char'? То, что я пытаюсь сделать, вызывает у меня ошибку сегментации, когда я пытаюсь сделать это. –

+0

'all' - это 8-байтное большое целое число и огромное количество. Почему вы хотите, чтобы он был одним байтом маленького 'char'? – deamentiaemundi