Tout est une question de mémoire =)
Forum Programmation : Tout est une question de mémoire =)
Bonjour à tous,
Je développe actuellement un client / serveur de supervision réseau en C qui permet de centraliser les informations suivantes:
quelque soit le serveur d'application sur lequel il est installé, le programme retourne:
Le nombre de processeur, avec leur fréquence max et la fréquence d'utilisation (pour faire un graph)
Le nombre de partition, leur espace max et l'espace utilisé, pour une fois de plus avoir une valeur actuelle et un rapport.
La mémoire vive max et la mémoire vive utilisée.
Mon client serveur marche très bien, quoi de plus simple sous linux debian pour retourner ces informations que de les récuperer dans quelques fichiers.
Cependant, et voila le but de ce sujet, je me disais ce matin, vue qu'en C la fonction
Code :
|
permet d'allouer dynamiquement de la mémoire, retournant -1 si l'espace voulu dans la mémoire vive n'est pas disponible, est ce qu'il n'existe pas un moyen autre que de consulter des valeurs dans des fichiers (exemple Linux Debian) pour obtenir la mémoire vive max d'un système et la mémoire utilisée? Existe-t-il une fonction?
Bonne journée à tous,
SY57
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Pourquoi utilise tu pas le C++ ?
new int
@St3fff : aucun rapport avec la question
@seeyou : http://www.oreilly.fr/contenu/2007 [...] sous-linux
Bonjour,
Pour répondre à la question de St3fff:
Pourquoi ne pas développer en C++?
Je répondrais par pourquoi ne pas développer en java, C# (avec monodevelopp pour linux), pascal, ou autre?
J'utilise le langage qui répond le mieux à ce que je veux faire. Le C++ offre certe plus de fonctionnalité, mais comme j'en ai pas l'utilité sur ce projet alors j'ai opté pour le C.
Je vais maintenant regarder le lien de Omar_Sharif et si besoin je ferais des remarques.
Cordialement,
SY57
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Répondre à seeyou57
Bon je viens de regarder rapidement le lien, c'est plus ou moins ce que je fais actuellement, ce que je voulais savoir c'est est-ce qu'en C, il existe une fonction qui permet d'obtenir la memoire totale du système et la mémoire restante ou utilisée? Le tout sans faire appel ni à des script shell, ni de commande système, ni de fichier à ouvrir.
Tout simplement car c'est ce que fait mon programme actuellement.
Cordialement,
Ps: ma question est juste la pour un but d'optimisation logiciel.
Message édité par seeyou57 le 13-08-2007 à 18:07:34
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Répondre à seeyou57
D'accord, j'avais compris que tu voulais la commande par un shell.
J'ai essayé de chercher, je n'ai rien trouvé là dessus.
Ce qui m'etonne c'est que le C est un langage qui est très sensible à la mémoire d'où ma question.
Si je trouve je posterais la réponse.
Merci encore,
Cordialement.
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Répondre à seeyou57
Je n'ai pas bien compris ce qu'est demandé.
Obtenir la mémoire totale disponible, n'est pas la même chose que connaitre la mémoire maximale allouable par malloc. C'est dû au fait que malloc alloue une mémoire contigüe. Si elle est morcellée (par l'OS évidement), la taille allouable par malloc sera faible (par rapport à la taille totale).
Si c'est pour rechercher du memory leak, tu peux faire une macro qui remplace les malloc et les free (mais il faut modifier le code contrairement au C++).
Si c'est pour voir les infos d'un process, c'est dépendant de l'OS.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Bonjour,
Oui c'est pour avoir la mémoire total max d'un systeme, comme je l'ai dit c'est juste une question dans un but d'optimisation.
Cordialement
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Répondre à seeyou57
Peut-être avec getrlimit() (ce n'est pas C ANSI évidemment).
Mais bon, si tu n'utilises que les malloc et free, ça n'a pas trop d'intérêt.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Bonsoir,
non je n'utilise pas que ça, mon client-serveur permet de connaitre la charge en mémoire vive des serveurs sur lequel il est installé.
Actuellement, etant des système Debian Linux, ca le fait en utilisant des acquis système c'est tout.
Je voulais juste savoir si une fonction pouvait donner ces informations, ce qui rendrait mon programme facilement portable.
Cordialement
SeeYou57
Responsable Sécurité des Systèmes d'Informations (R.S.S.I)
Répondre à seeyou57
En C ANSI, il n'existe pas de telles fonctions, si c'est ce que tu demandes, il faut coder selon le (les) OS. Il n'y a pas d'autre possibilité (ce qui est logique puisque c'est l'OS (via le scheduler) qui décide comment gérer sa mémoire. Donc, pour apporter une flexibilité sur l'OS, ce genre d'information ne fait pas partie de la norme C.
Et je ne crois pas non plus qu'il existe de fonction même dans la norme POSIX (ça restreindrait peut-être trop le dev d'un OS POSIX).
J'ai trouvé une fonction comme mallinfo, mais pas normée du tout
http://www.delorie.com/djgpp/doc/libc/libc_550.html
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Il y a 1137 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
