Question

J'essaie d'obtenir des informations telles que la version du système d'exploitation, l'espace disque disponible, l'espace disque disponible et la mémoire vive installée sur un système Linux en C ++. Je sais que je peux utiliser system () pour exécuter différentes commandes Linux et capturer leur sortie (ce que je suis en train de faire), mais je me demandais s'il existait un meilleur moyen? Existe-t-il quelque chose dans la bibliothèque standard C ++ que je puisse utiliser pour obtenir des informations du système d'exploitation?

Était-ce utile?

La solution

Si vous utilisez les commandes * nix via le système.

Ensuite, faites défiler man vers le bas de la page de manuel pour vous indiquer en quoi les appels système C pertinents sont liés.

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

Donc, si vous utilisez system ("uname"). La page de manuel indique qu’il existe également un appel système uname C (uname (2)). Donc, vous pouvez maintenant faire un 'man 2 uname' pour obtenir des informations sur l'utilisation de l'appel système C: uname.

Autres conseils

Il n'y a rien dans la bibliothèque C ++ Standard à ces fins. La bibliothèque que vous pouvez utiliser est libhal , qui résume la vue des programmes au matériel, en collectant diverses informations provenant de / proc , / sys , etc. . HAL , faites défiler vers le bas, il semble qu'une liaison non officielle C ++ soit également disponible (Haven Cela n’a pas été testé, bien que libhal fonctionne aussi très bien pour les programmes C ++). Utilisez la commande lshal pour afficher toutes les informations sur les appareils disponibles pour HAL.

Si vous ne souhaitez pas utiliser HAL comme le suggère litb, vous pouvez lire des choses tout droit sorti du / proc filesystem , à condition qu’il soit présent sur votre système. Ce n’est pas la manière de faire les choses la plus indépendante de la plate-forme, et dans de nombreux cas, vous devrez effectuer une petite analyse syntaxique pour séparer les fichiers.

Je pense que HAL résume un grand nombre de ces détails pour vous, mais sachez que vous pouvez le lire directement à partir de / proc si l'utilisation d'une bibliothèque n'est pas une option.

Les informations système n'étant par définition pas portables, il n'existe pas de solution standard. Votre meilleur choix est d'utiliser une bibliothèque qui effectue la plupart du travail à votre place. L’une de ces bibliothèques multi-plateformes (contrairement à hal, qui est actuellement spécifique à Linux) est l’ ?? API SIGAR . , qui est open source BTW. Je l’ai utilisé dans un projet C ++ sans trop de peine (l’installation est un peu non standard mais peut être facilement calculée)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top