2011-12-28 44 views
8

Làm cách nào để tôi có thể viết dấu thời gian có thể đọc được của con người trong hạt nhân Linux? Tôi nghĩ rằng do_gettimeofday trả về epoch nhưng tôi không muốn chuyển đổi nó thành thời gian có thể đọc được. Tôi chỉ muốn một định dạng như Hour:Min:Sec:Msec. Cảm ơndấu thời gian có thể đọc được của con người trong hạt nhân Linux

+1

do_gettimeofday là đặt cược tốt nhất của bạn. Bạn sẽ tự định dạng nó. Trường hợp sử dụng chính xác là gì? –

Trả lời

7

Nhân sau có chức năng time_to_tm để ngắt thời gian epoch thành định dạng có thể đọc được của con người.

Dưới đây là một ví dụ:

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); 

Một lần nữa, điều này chỉ có sẵn trong hạt nhân sau này. Tham số thứ hai time_to_tm là giá trị bù cho thời gian epoch. Trong thời gian địa phương của tôi là 0, tôi không biết bạn nên sử dụng cái nào.

1

Mặc dù tôi không nghĩ rằng có một chức năng cho điều này, bạn có thể làm điều đó khá dễ dàng nếu bạn không cần ngày.

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); 

Lưu ý rằng bạn nhận được giờ GMT, chứ không phải giờ địa phương.

Các vấn đề liên quan