2008-12-04 29 views
8

Estoy tratando de obtener información como la versión del sistema operativo, espacio en el disco duro, espacio en disco disponible y la memoria RAM instalada en un sistema Linux en C++. Sé que puedo usar system() para ejecutar diferentes comandos de Linux y capturar su salida (que es lo que estoy haciendo actualmente), pero me preguntaba si hay una forma mejor. ¿Hay algo en la biblioteca estándar de C++ que pueda usar para obtener información del sistema operativo?¿Cómo leo la información del sistema en C++?

Respuesta

12

Si está utilizando comandos * nix a través del sistema.

Luego haga que el hombre se desplace hasta la parte inferior de la página de manual y generalmente le mostrará las llamadas relevantes del sistema C.

Example: man uname: 
SEE ALSO 
     uname(2), getdomainname(2), gethostname(2) 


Explanation of numbers: 

(1): User UNIX Command 
(2): Unix and C system calls 
(3): C Library routines 
(4): Special file names 
(5): File formats 
(6): 
(7): 
(8): System admin commands 

Si está utilizando el sistema ("uname"). Desde la página de manual, puede ver que también hay una llamada al sistema de uname C (uname (2)). De modo que ahora puede hacer un 'hombre 2 uname' para obtener información sobre cómo usar la llamada al sistema C de uname.

+2

También puede strace un programa de sistema (aplicación) existente, si se puede controlar el ruido. P.ej. "strace uname -a" Esto le muestra TODAS las llamadas al sistema realizadas por ese programa. Encuentre la llamada al sistema correcta y puede invocar la misma rutina desde su propio programa. –

+0

No sabes lo feliz que estoy de no tener que analizar la salida del sistema ("df"). Muchas gracias. :) –

5

No hay nada en la biblioteca estándar de C++ para estos fines. La biblioteca se puede utilizar es libhal, que abstrae la vista de los programas para el hardware, la recogida de informaciones diversas de /proc, /sys y otros. HAL, desplácese hacia abajo, parece haber un enlace no oficial de C++ disponible también (aunque no lo he probado, mientras que libhal también funciona bien para los programas en C++). Use el comando lshal para mostrar toda la información del dispositivo disponible para HAL.

2

Si no desea utilizar HAL como lo sugiere litb, puede leer cosas directamente del /proc filesystem, siempre que esté allí en su sistema. Esta no es la manera de hacer las cosas más independiente de la plataforma, y ​​en muchos casos tendrá que hacer un pequeño análisis para separar los archivos.

creo HAL abstrae muchos de estos detalles para usted, pero sólo sé que se puede leer directamente de/proc si se utiliza una biblioteca no es una opción.

2

La información del sistema es, por definición, no es portátil, por lo que no hay una solución estándar. Su mejor opción es usar una biblioteca que hace la mayor parte del trabajo por usted. Una de esas bibliotecas de plataforma cruzada (a diferencia de hal, que actualmente es específica de Linux) es SIGAR API, que es BTW de fuente abierta. Lo he utilizado en un proyecto de C++ sin muchos problemas (la instalación es un poco no estándar, pero puede ser resuelto fácilmente)

Cuestiones relacionadas