2011-01-10 9 views
10

Im trabajando en una aplicación para recopilar y enviar varios bits de información del sistema (espacio de partición/libre, información de la batería del ordenador portátil, etc.). No estoy teniendo mucho éxito obteniendo esta información en forma de ap directa C++ .. aunque todo está disponible a través de archivos en/proc (o similar).Linux C++: archivos apis vs/proc?

Entonces, me pregunto si leer o analizar estos archivos en mi aplicación C++ es la forma adecuada de obtener esta información o si sigo intentando descubrir las API. (NOTA: estoy trabajando con statvfs).

Hasta ahora parece que es más fácil recopilar este tipo de información en Win32. Parece extraño.

+0

La fuente procinfo tiene algunos consejos sobre cómo analizar cada archivo http://svn.tabris.net/repos/procinfo-ng/trunk/ – pmr

Respuesta

7

Es una buena práctica , con mucho, a seguir con una API en el siguiente orden de precedencia.

  • Su API de lenguaje (no hay mucha ayuda para usted aquí, pero decir para cuerdas, una función de cadena C99 es mejor usar de una instalación de cadena biblioteca especificada por un Posix u otro estándar del sistema operativo.)

  • Posix API de software operativo

  • API del núcleo indocumentados documentada de la API del núcleo (al menos éstos se romperá, por ejemplo, los usuarios ioctl si cambian, por lo que probablemente no cambiarán)

  • /proc

  • /dev/kmem, /dev/mem

No hay ninguna razón para creer que /proc de arrastre será portátil o incluso el mismo de una versión a. ¡No todos los sistemas tendrán un /proc montado!

Una vez dicho todo esto, es mucho más fácil simplemente salir cosas fuera de /proc y si se trata de la única interfaz disponible, entonces debería seguir adelante y utilizar it.qa

Por último, el orden de los dos últimos no están del todo claros, porque /proc no está disponible para un análisis de volcado de colapso del kernel post-mortem, pero las herramientas que pueden ver en el volcado del núcleo seguirán funcionando.

+1

No hay * otra interfaz que/proc para mucha información en Linux. Y para los cambios de versión, * preste atención * a las salidas/proc que contienen una ID de versión. ¡Y en salidas de múltiples columnas/proc, no asuma que no obtendrá más columnas en el futuro! –

+0

Y es por eso que lo incluí en la lista de lugares a donde ir. – DigitalRoss

+1

+1 pero agregaría las utilidades '/ proc' anteriores en el repositorio que usan'/proc' de la manera correcta específica del sistema (como 'procps',' systune', 'linuxinfo') – darvids0n

0

Como habrás notado, mucha información de sistemas Linux se encuentra en /proc. Y tiene razón en que a menudo no hay una API de C para recuperar esa información (aunque normalmente hay un comando de shell si está inclinado a seguir con bash en lugar de C++). En el peor de los casos, es posible que esté atascado al analizar /proc, aunque es posible que pueda obtener algún código de muestra en forma de comandos de shell de código abierto para el elemento en particular que desee.

+0

Supongo que solo quiero que "alguien que sabe" diga "there aint" no apetecible para eso ". Estoy bien con el análisis de los diversos archivos si eso es lo que se supone que es correcto. – ethrbunny

+0

@jyeargers La mayoría de las tareas no tienen una API pegajosa.El código de muestra de proyectos de código abierto suele ser el camino a seguir. (O simplemente 'strace' el comando de shell que desea emular y vea qué archivos abre si eso es todo lo que necesita) – chrisaycock

1

pensé que/proc fue el API (todo es un archivo ...)