Come posso scrivere il timestamp leggibile dall'uomo nel kernel di Linux? Penso che do_gettimeofday
restituisca l'epoca ma non voglio provare a convertirlo in tempo leggibile. Voglio solo un formato come Hour:Min:Sec:Msec
. Grazietimestamp leggibile dall'uomo nel kernel linux
8
A
risposta
7
I kernel successivi hanno una funzione time_to_tm
per interrompere il periodo storico in formato leggibile dall'uomo.
Ecco un esempio:
struct timeval t;
struct tm broken;
do_gettimeofday(&t);
time_to_tm(t.tv_sec, 0, &broken);
printk("%d:%d:%d:%ld\n", broken.tm_hour, broken.tm_min,
broken.tm_sec, t.tv_usec);
Ancora una volta, questo è disponibile solo nei kernel successivi. Il secondo parametro time_to_tm
è un offset al tempo epoca. Nel mio fuso orario locale è 0, non so quale usare.
1
Anche se non penso ci sia una funzione per questo, puoi farlo abbastanza facilmente se non ti serve il giorno.
struct timeval now;
unsinged int temp, second, minute, hour;
do_gettimeofday(&now);
temp = now.tv_sec;
second = temp%60;
temp /= 60;
minute = temp%60;
temp /= 60;
hour = temp%24;
printf("%02d:%02d:%02d:%06d\n", hour, minute, second, now.tv_usec);
noti che si ottiene il tempo GMT, non ora locale.
do_gettimeofday è la soluzione migliore. Avrai formattato te stesso. In ogni caso, qual è esattamente il caso d'uso? –