Domanda

Sto cercando di ottenere informazioni come la versione del sistema operativo, lo spazio su disco rigido, lo spazio su disco disponibile e la RAM installata su un sistema Linux in C ++. So che posso usare system () per eseguire diversi comandi Linux e catturare il loro output (che è quello che sto facendo attualmente) ma mi chiedevo se c'è un modo migliore? C'è qualcosa nella libreria standard C ++ che posso usare per ottenere informazioni dal sistema operativo?

È stato utile?

Soluzione

Se si utilizzano i comandi * nix tramite il sistema.

Quindi man scorri fino alla fine della pagina man e di solito ti mostrerà quali chiamate di sistema C sono correlate.

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

Quindi, se stai utilizzando il sistema (" uname "). Dalla pagina man puoi vedere che esiste anche una chiamata di sistema C uname (uname (2)). Quindi ora puoi fare un 'man 2 uname' per ottenere informazioni su come usare il sistema C chiama uname.

Altri suggerimenti

Non c'è nulla nella libreria standard C ++ per questi scopi. La libreria che potresti usare è libhal , che estrae la vista dei programmi dall'hardware, raccogliendo varie informazioni da / proc , / sys e altri . HAL , scorri verso il basso, sembra che sia disponibile anche un'associazione C ++ non ufficiale (haven ' ma l'ho testato, mentre libhal funziona bene anche per i programmi C ++). Utilizzare il comando lshal per visualizzare tutte le informazioni sul dispositivo disponibili per HAL.

Se non si desidera utilizzare HAL come suggerisce litb, è possibile leggi le cose direttamente dal / proc filesystem , purché sia ??presente sul tuo sistema. Questo non è il modo più indipendente dalla piattaforma di fare le cose, e in molti casi dovrai fare un po 'di analisi per separare i file.

Penso che HAL abbia estratto molti di questi dettagli per te, ma sappi solo che puoi leggerlo direttamente da / proc se l'uso di una libreria non è un'opzione.

Le informazioni di sistema non sono per definizione portatili, quindi non esiste una soluzione standard. La tua scommessa migliore è usare una libreria che fa la maggior parte del lavoro per te. Una di queste librerie multipiattaforma (a differenza di hal, che attualmente è specifica per Linux) è API SIGAR , che è open source BTW. L'ho usato in un progetto C ++ senza troppi problemi (l'installazione è un po 'non standard ma può essere facilmente compresa)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top