2008-10-14 13 views
11

Linux proporciona la llamada stime (2) para establecer la hora del sistema. Sin embargo, aunque esto actualizará la hora del sistema, no establece el reloj del hardware del BIOS para que coincida con la nueva hora del sistema.¿Cómo establece programáticamente el reloj de hardware en Linux?

Los sistemas Linux generalmente sincronizan el reloj del hardware con la hora del sistema al apagar y en intervalos periódicos. Sin embargo, si la máquina recibe un ciclo de encendido antes de una de estas sincronizaciones automáticas, el tiempo será incorrecto cuando la máquina se reinicie.

¿Cómo se asegura de que el reloj del hardware se actualice cuando establece la hora del sistema?

+0

Especificar un lenguaje de programación. –

+0

¿Por qué importaría el lenguaje de programación? ¿Tiene diferentes respuestas para diferentes idiomas/ –

+0

Er ................. sí. –

Respuesta

14

Mira la página de manual RTC para los detalles, pero si usted está en el sistema como root, algo como esto:

struct  rtc_time { 
     int   tm_sec;  
     int   tm_min;  
     int   tm_hour;  
     int   tm_mday;  
     int   tm_mon;  
     int   tm_year;  
     int   tm_wday; /* unused */ 
     int   tm_yday; /* unused */ 
     int   tm_isdst;/* unused */ 
    }; 

struct rtc_time rt; 
/* set your values here */ 
fd = open("/dev/rtc", O_RDONLY); 
ioctl(fd, RTC_SET_TIME, &rt); 
close(fd); 
+1

No se necesita la raíz, solo capacidad CAP_SYS_TIME según rtc (4). –

9

Después de llamar stime(), haga lo siguiente:

system("/sbin/hwclock --systohc"); 

Véase el (8) página de manual hwclock para más información.

+2

Tenga en cuenta que si su rtc está configurado para usar la hora UTC, necesita agregar '--utc' o' --localtime' de lo contrario. –

2

También me gustaría señalar que el reloj de hardware solo es preciso hasta cierto punto (he visto sistemas que perderán/ganarán un par de segundos al día).

¿Ha considerado configurar el daemon de tiempo de red para sincronizar su reloj con un servidor de tiempo?

Es cierto que esta sincronización no ocurre hasta después de que se inicia el daemon, por lo que mantener sincronizado el reloj del hardware también ayuda entre el encendido y el punto en que el daemon de tiempo se sincroniza con el servidor horario.

+0

La mayoría de esas variaciones, según mi experiencia, se deben a un bajo voltaje en la batería de motheboard. Sugiero revisarlo antes de configurar un servicio innecesario si no es una misión crítica. –

2

Comenzaré leyendo el código fuente de hwclock.

+2

¿Por qué leer el código en lugar de simplemente usarlo? –

+2

Es posible que esté escribiendo para un sistema integrado y no tenga espacio para otro programa. O tal vez solo quieres saber por curiosidad. –

+0

Esa fue una respuesta a la pregunta original. No sé por qué es necesario. – iny

0

Si el editor de texto es diferente de Kubuntu (Kate es el valor por defecto en el editor) , use el suyo con el comando sudo en la terminal.

  1. terminal de carrera
  2. copiar y pegar este comando sudo kate /etc/default/rcS prensa Introduzca
  3. introducir la contraseña de usuario (la contraseña de inicio de sesión) de prensa Introduzca
  4. editor de texto se abrirá en el escritorio
  5. cambie la línea UTC=yes a UTC=no
  6. y haga clic en Guardar (en la parte superior del editor de texto barra de pestañas)
  7. reinicio
Cuestiones relacionadas