Ottieni informazioni di sistema dal programma C?

0

Sto scrivendo un piccolo programma in C che voglio usare per emettere alcune statistiche di sistema sul mio display a caratteri 16x2 HD44780. Il sistema con cui lavorerò è un sistema Debian ARM e, sebbene irrilevante, il display si trova sull'intestazione GPIO. (Il sistema è un Raspberry Pi).

Come tentativo iniziale (un po 'non ambizioso), mi piacerebbe iniziare con qualcosa di semplice come l'utilizzo della RAM e della CPU (sono nuovo di C).

Capisco che se faccio chiamate di comando esterne ho bisogno di fork () ed execve () (o di qualche equiv che mi permetta di restituire i risultati), quello che vorrei sapere è come vado a ottenere le informazioni che ho voglio in un bel formato pulito che posso usare.

Sicuramente non dovrò chiamare (per es.);

free -h

E poi usa awk o simili per tagliare il pezzo che voglio? Ci deve essere un modo più pulito?

La domanda dovrebbe essere vista come più generica, quale è la migliore pratica per ottenere informazioni sul sistema in C (l'utilizzo della RAM / CPU è solo un esempio iniziale).

    
posta Hamid 05.09.2012 - 20:44
fonte

3 risposte

7

Le informazioni sullo stato del sistema vanno oltre lo scopo delle specifiche del linguaggio C, quindi tutto ciò che fai sarà specifico per il sistema in cui verrà eseguito il tuo programma.

Da quando hai identificato un ambiente di destinazione (Linux) e un programma che fornisce alcune delle informazioni che stai cercando ( free(1) ), la tua migliore scommessa sarebbe quella di acquisire ed esaminare la fonte per quel programma, imparare come funziona e usa ciò che hai imparato nel tuo programma. (Questo sarebbe sicuramente molto meglio che generare copie dell'utilità e selezionare l'output a parte).

    
risposta data 05.09.2012 - 21:01
fonte
3

Datti che sei su un moderno sistema Linux, le informazioni che stai cercando si trovano nello pseudo-file system rootato a /proc/ . Ogni processo ha una sottodirectory /proc/[pid] e altre sottodirectory forniscono uno stato globale. Per esempio. /proc/meminfo è la fonte di free(1) .

    
risposta data 06.09.2012 - 11:24
fonte
0

Esistono varie routine di libreria che forniscono informazioni di sistema, prova a dare un'occhiata alla chiamata sysinfo() .

    
risposta data 06.09.2012 - 14:02
fonte

Leggi altre domande sui tag