2010-06-18 10 views

Respuesta

21

Via top o mediante uptime, pero no sé acerca de cualquier llamada al sistema, alguien va a ciencia cierta :)

uptime debería ser bastante fácil analizar.

tropezado este:

#include <sys/sysinfo.h> 

struct sysinfo info; 
sysinfo(&info); 
printf("Uptime = %ld\n", info.uptime); 
+1

Horror para sysinfo() :) NB: 'struct sysinfo' es bastante 'furtivo' entre 2.4 (principios) 2.4 (tarde) y 2.6. Si es probable que su código se use para dispositivos, es útil ejecutar comprobaciones de compilación para ver qué miembros pueden ser diferentes. –

+0

printf ("Tiempo de actividad:% 02ld:% 02ld:% 02ld \ n", info.uptime/3600, info.uptime% 3600/60, info.uptime% 60); –

+0

Sin embargo, '' no parece existir cuando está compilando el kernel (vagabundo y trusty64):/¿Cómo hacer en esa situación? – Emixam23

2

Si está allí y contiene el miembro uptime, struct sysinfo es la manera preferida para ir, ya Jack explained.

La otra forma es leer btime de /proc/stat, luego restarlo de la hora actual. btime es solo una época UNIX que indica cuándo arrancó el kernel.

Eso le da el n. ° de segundos desde el arranque, que luego puede traducir en años/meses/días/horas/etc. Esto ahorra tener que lidiar con cadenas en /proc/uptime. Si btime no está allí, y struct sysinfo no tiene ningún miembro llamado uptime, debe analizar /proc/uptime. Para los núcleos modernos, sysinfo() debería funcionar bien. La mayoría de las cosas que siguen funcionando 2.4 (o antes) en la naturaleza son dispositivos de algún tipo u otros sistemas integrados.

1

Para obtener la hora de inicio del sistema de una manera más portátil, sería usar "who -b". Para usar esto en un programa, debería generar un intérprete de comandos e interpretar su resultado. Desafortunadamente, este parece ser el único lugar donde dicha información está disponible en POSIX, y esto también solo como una extensión.