Je voudrai recuperer plus d'info sur la machine avec ce petit code :
#include <linux/kernel.h>
#include <linux/sys.h>
#include <sys/sysinfo.h>
#include <sys/utsname.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
float get_cpu_clock_speed ()
{
FILE* fp;
char buffer[1024];
size_t bytes_read;
char* match;
float clock_speed;
/* Charge le contenu de /proc/cpuinfo dans le tampon. */
fp = fopen ("/proc/cpuinfo", "r");
bytes_read = fread (buffer, 1, sizeof (buffer), fp);
fclose (fp);
/* Traite le cas où la lecture échoue ou le buffer est trop petit. */
if (bytes_read == 0 || bytes_read == sizeof (buffer))
return 0;
/* Place un caractère nul à la fin de la chaîne. */
buffer[bytes_read] = "\0";
/* Recherche la ligne commençant par "cpu MHz". */
match = strstr (buffer, "cpu MHz");
if (match == NULL)
return 0;
/* Analyse la ligne pour extraire la vitesse d'horloge. */
sscanf (match, "cpu MHz : %f", &clock_speed);
return clock_speed;
}
int main ()
{
/* info archi */
struct utsname utsname;
long sysconf_return;
if (uname(&utsname) == -1 )
{
perror("uname()");
// en cas d'erreur d'analyse du systeme
}
else
{
printf("Processeur \t\t: %s\n", utsname.machine);
printf ("CPU clock speed\t\t: %4.0f MHz\n", get_cpu_clock_speed ());
printf("Systeme \t\t: %s %s (%s)\n", utsname.sysname, utsname.release, utsname.version);
}
sysconf_return = sysconf(_SC_VERSION);
if (sysconf_return != -1)
{
// si on est comptible posix afficher la norme utilisee
printf("Compatible POSIX %ld\n", sysconf_return);
}
/* Facteurs de conversion. */
const long minute = 60;
const long hour = minute * 60;
const long day = hour * 24;
const double megabyte = 1024 * 1024;
/* Récupère les statistiques système. */
struct sysinfo si;
sysinfo (&si);
/* Affiche un résumé des informations intéressantes. */
printf ("uptime système \t\t: %ld jours, %ld:%02ld:%02ld\n",
si.uptime / day, (si.uptime % day) / hour,
(si.uptime % hour) / minute, si.uptime % minute);
printf ("RAM totale \t\t: %5.1f Mo\n", si.totalram / megabyte);
printf ("RAM libre \t\t: %5.1f Mo\n", si.freeram / megabyte);
printf ("nb processus \t\t: %d\n", si.procs);
return EXIT_SUCCESS ;
}
ou dois je chercher quelles fonctions/librairies dois je appeler pour avoir plus d'info sur le systeme ?
TEST-FRSP:~/tmp/c # gcc -Wall -O9 system.c -o system && strip system
TEST-FRSP:~/tmp/c # ./system
Processeur : i686
CPU clock speed : 548 MHz
Systeme : Linux 2.6.18.2-34-test (#1 Fri Jun 29 17:22:54 CEST 2007)
Compatible POSIX 200112
uptime système : 19 jours, 11:09:31
RAM totale : 503.7 Mo
RAM libre : 17.5 Mo
nb processus : 232
Poste le Saturday 30 June 2007 11:38:32