Come stampare la differenza di orario in precisione di millisecondi e nanosecondi da C in Linux?

Ho questo programma che stampa la differenza di tempo tra 2 diverse istanze, ma stampa in precisione di secondi. Voglio stamparlo in millisecondi e un’altra in nanosecondi.

//Prints in accuracy of seconds #include  #include  int main(void) { time_t now, later; double seconds; time(&now); sleep(2); time(&later); seconds = difftime(later, now); printf("%.f seconds difference", seconds); } 

Come posso farlo?

Leggi prima la pagina man di tempo (7) .

Quindi, puoi usare clock_gettime (2) syscall (potrebbe essere necessario colbind -lrt per ottenerlo).

Quindi potresti provare

  struct timespec tstart={0,0}, tend={0,0}; clock_gettime(CLOCK_MONOTONIC, &tstart); some_long_computation(); clock_gettime(CLOCK_MONOTONIC, &tend); printf("some_long_computation took about %.5f seconds\n", ((double)tend.tv_sec + 1.0e-9*tend.tv_nsec) - ((double)tstart.tv_sec + 1.0e-9*tstart.tv_nsec)); 

Non aspettatevi che i timer hardware abbiano una precisione di un nanosecondo, anche se forniscono una risoluzione di nanosecondi. E non provare a misurare durate di tempo inferiori a diversi millisecondi: l’hardware non è abbastanza fedele. Si potrebbe anche voler usare clock_getres per interrogare la risoluzione di un certo orologio.

timespec_get da C11

Questa funzione restituisce fino a nanosecondi, arrotondati alla risoluzione dell’implementazione.

Esempio da: http://en.cppreference.com/w/c/chrono/timespec_get :

 #include  #include  int main(void) { struct timespec ts; timespec_get(&ts, TIME_UTC); char buff[100]; strftime(buff, sizeof buff, "%D %T", gmtime(&ts.tv_sec)); printf("Current time: %s.%09ld UTC\n", buff, ts.tv_nsec); } 

Produzione:

 Current time: 02/18/15 14:34:03.048508855 UTC 

Maggiori dettagli qui: https://stackoverflow.com/a/36095407/895245