Programmation en c

nadou21021988 Messages postés 4 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 février 2008 - 29 nov. 2007 à 09:02
theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010 - 3 déc. 2007 à 11:49
salut tout le monde,je m'appelle Nadia et je suis étudiante en 3éme année informatique.
Mon probleme c'est la programmation,j'ai fait tout mon possible pour apprendre mais rien y faire.bref,on m'a donné un tp à faire il s'agit de créer un programme en c ou en c++  et aprés son exécution il doit donnée un tableau qui nous donne des informations sur la memoire virtuelle(il doit faire le meme travail que la commande ps -v sous unix.svp aidez moi
 merci d'avance

Nadou

5 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
29 nov. 2007 à 12:39
Salut Nadia,
Pour obtenir des informations sur la mémoire virtuelle, il faut utiliser l'API GlobalMemoryStatus(...).
Voici un lien avec quelques explications sur le fonctionnement de cette fonction :

http://msdn2.microsoft.com/en-us/library/aa366586.aspx

Tu trouveras dans ce deuxième lien, un exemple d'utilisation de cette fonction en VB :

http://support.microsoft.com/kb/147886/fr

Bon courage et n'hésites pas si tu bloques.

Shell
0
nadou21021988 Messages postés 4 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 février 2008
29 nov. 2007 à 22:50
slt et merci beaucoup pour votre aide,mais je pense que vous m'avez pas bien compris,je cherche un programme ecrit en C QUI FAIT EXACTEMENT LE MEME TRAVAIL QUE LA COMMANDE  PS -V SOUS UNIX.
RQ: LA COMMANDE PS -V SOUS UNIX DONNE DES INFORMATIONS SUR LA MEMOIRE VIRTUELLE.
JE PARLE TOUJOUR SUR UNIX PAS WINDOWS.
MERCI.....................BONNE NUIT

nadou
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 nov. 2007 à 21:22
Salut,


Bon, alors pour Windows XP, il faut... Nan je déconne !


Chez Linux, ils sont fans des fichiers. Donc les infos sur l'états des processus sont stockées dans des fichiers.

Je sais pas s'il y a mieux genre des commandes qui aide, mais j'ai pas trouvé (A part sysinfo, mais ça ne donne que des infos sur globales, pas par fichier).


Toutes les infos sont dans /proc. Ce répertoire contient un répertoire
par processus (Les noms des répertoires sont les PID des processus),
plus quelques autres trucs. Parmis ces autres trucs, il y a le fichier
meminfo qui contient des info sur la mémoire, mais là aussi au niveau
du système.


La mémoire consommées des processus est dans /proc/[pid]/stat. Ce
fichier contient des données "aisément" accessibles via un fscanf. Plus
précisément, c'est vsize et rss qui risquent de t'intéresser. Tout le
contenu des fichiers de /proc est détaillé ici.


J'ai essayé, voilà ce que ça à donné (Je précise que je suis Windowsien de naissance) :

#include "stdio.h"

int main(int argc, char ** argv)
{
FILE * lpFile;
char lpFileName[256];
int i;
long li, rss;
unsigned long u, vmem;
char state;
char buffer [1024];

if (argc != 2)
{
printf("Cette commande prend un PID en paramètre\n");
return 1;
}

sprintf(lpFileName, "/proc/%s/stat", argv[1]);
lpFile = fopen(lpFileName, "r");
if (! lpFile)
{
printf("Ouverture du fichier %s impossible\n", lpFileName);
return 1;
}

/* pid, comm, state, ppid */
fscanf(lpFile, "%d %1023s %c %d", &i, buffer, &state, &i);
/* pgrp, session, tty_nr, tpgid */
fscanf(lpFile, "%d %d %d %d", &i, &i, &i, &i);
/* flags, minflt, cminflt, majflt, cmajflt */
fscanf(lpFile, "%lu %lu %lu %lu %lu", &u, &u, &u, &u, &u);
/* utime, stime, cutime, cstim */
fscanf(lpFile, "%lu %lu %ld %ld", &u, &u, &li, &li);
/* priority, nice, 0 */
fscanf(lpFile, "%ld %ld %ld", &li, &li, &li);
/* itrealvalue, starttime, vsize, rss, rlim */
fscanf(lpFile, "%ld %lu %lu %ld %lu", &li, &u, &vmem, &rss, &u);

printf("Le processus %s consomme :\n", buffer);
printf("%lu ko de mémoire virtuelle\n", vmem / 1024);
printf("%li pages -> %li ko (Pour des pages de 4 ko)\n", rss, rss * 4);

fclose(lpFile);
return 0;
}

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 nov. 2007 à 21:34
Un petit double post pour pleurer devant mon code bien moche.

* Content de faire surtout du Windows *


Pour aussi te préciser qu'un topic intitulé "programmation en c" dans
un forum sur le C/C++, y en a eu des milliers, y en aura des
milliers... Mais ça serait bien que tu ne nous en fasses plus. Un petit
[C/Linux]Mémoire des processus, s'aurait été plus accrocheur tout en clarifiant la problématique.


Finalement, je te propose une petite boutade à transmettre à ceux qui
t'on demandé ce taffe (Faire un programme C qui fait comme la commande
ps -v) :

#include "stdlib.h"

int main(int argc, char ** argv)
{
  system("ps -v");
  return 0;
}

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010
3 déc. 2007 à 11:49
Faut reconnaitre, ta boutade est simple et elle marche :) Je valide à 200%

Mess with the best, die like the rest
0
Rejoignez-nous