• # En C

    Posté par . En réponse au message taille du "fichier" /proc/meminfo. Évalué à 3. Dernière modification le 17 août 2015 à 19:26.

    Exemple sans gestion d'erreur en C:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    static int meminfo(char *key)
    {
     FILE *file;
     char _key[32];
     int val;
     file = fopen("/proc/meminfo", "r");
     while (fscanf(file, "%[^:]: %d%*[^\n]\n", _key, &val) == 2)
     if (!strcmp(key, _key))
     return fclose(file), val;
     return fclose(file), -1;
    }
    int main(void)
    {
     printf("meminfo(SwapFree) = %d\n", meminfo("SwapFree"));
     printf("meminfo(Invalid_Key) = %d\n", meminfo("Invalid_Key"));
     return EXIT_SUCCESS;
    }

    Compile avec gcc -o test -ansi -pedantic -Wall -Werror -O test.c.

    Exemple de résultat sur ma machine :

    $ ./test 
    meminfo(SwapFree) = 265068
    meminfo(Invalid_Key) = -1
    

    Voici un peu d'explications concernant le fscanf("%[^:]: %d %*[^\n]\n") :

    • "%[^:]:": Lis tant que tu ne trouves pas : et stockes ce que tu lis dans le char* donné en paramètre. Enlève le : restant.
    • "%*[^\n]\n" : Lis tant que tu ne trouves pas \n et ignores ce que tu lis. Enlève le \n restant. (En gros « vas à la ligne suivante »)

    En C++ tu devrais pouvoir t'en sortir avec << et l'API de stream.h, mais je connais pas très bien comment ça fonctionne ;)