Pergunta

Eu estou tentando obter informações como a versão do SO, espaço em disco rígido, o espaço disponível em disco e memória RAM instalada em um sistema Linux em C ++. Eu sei que eu posso usar system() para executar diferentes comandos Linux e captar a sua saída (que é o que eu estou fazendo atualmente), mas eu queria saber se existe uma maneira melhor? Existe algo na biblioteca C ++ padrão que eu possa usar para obter informações do sistema operacional?

Foi útil?

Solução

Se você estiver usando comandos * nix através do sistema.

Em seguida, faça homem de deslocamento para a parte inferior da página homem e, geralmente, vai mostrar o que sistema de C relevantes chamadas estão relacionadas.

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

Então, se você estiver usando o sistema ( "uname"). A partir da página homem que você pode ver que há também uma chamada de sistema C uname (uname (2)). Então, agora você pode fazer um 'man 2 uname' para obter informações sobre como usar o uname chamada de sistema C.

Outras dicas

Não há nada na biblioteca C ++ padrão para esses fins. A biblioteca você poderia usar é libhal, que abstrai a exibição de programas para o hardware, a coleta de várias informações de /proc, /sys e outros. HAL , rolar para baixo, parece haver um C ++ não-oficial de ligação também disponível (paraíso' t testado-lo embora, enquanto libhal também funciona bem para programas C ++). Use o lshal comando para exibir todas as informações de dispositivo disponíveis para HAL.

Se você não quiser usar HAL como litb sugere, você pode ler as coisas em linha reta do / proc filesystem , desde que ele está lá em seu sistema. Esta não é a maneira mais independente de plataforma de fazer as coisas e, em muitos casos, você vai precisar fazer um pouco de análise para detectar os arquivos.

Eu acho que HAL abstrai muitos desses detalhes para você, mas só sei que você pode lê-lo em linha reta de / proc se estiver usando uma biblioteca não é uma opção.

Informações do sistema é, por definição, não é portátil, portanto, não há solução padrão. Sua melhor aposta é usar uma biblioteca que faz a maioria do trabalho para você. Uma tal biblioteca multiplataforma (hal ao contrário, que é atualmente Linux específica) é SIGAR API , que é open source BTW. Eu usei-o em um projeto C ++ sem muita dificuldade (a instalação é um pouco fora do padrão, mas pode ser descoberto facilmente)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top