Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2439 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] comment acceder au donner d'un processus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] comment acceder au donner d'un processus

n°636891
slvn
Posté le 10-02-2004 à 08:32:16  profilanswer
 

Voila un tite question sympa :
 
sous windows / unix.
 
a la fin d'execution d'un programme, je souhaiterais savoir comment de temps il est passer sur le proc.  
le temps doit etre garder par le scheduleur donc, comment le recuperer.
 
(il ne s'agit pas d'avoir le timestamp du proc car il ne donne pas les informations recherches).
 
thanks,
 
Sylvain

mood
Publicité
Posté le 10-02-2004 à 08:32:16  profilanswer
 

n°636919
SoWhatIn22
Posté le 10-02-2004 à 09:34:43  profilanswer
 

sous unix: man times
sous windows: msdn GetProcessTimes

n°636952
Taz
bisounours-codeur
Posté le 10-02-2004 à 10:25:48  profilanswer
 

Code :
  1. /**
  2. * Un ps tres rudimentaire
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <ctype.h>
  8. #include <sys/types.h>
  9. #include <dirent.h>
  10. /**
  11. * Dertermine si une d est un repertoire relatif a un processus
  12. */
  13. static int is_procdir(const struct dirent *d)
  14. {
  15.   if(d==NULL || d->d_type!=DT_DIR)
  16.     {
  17.       return 0;
  18.     }
  19.   else
  20.     {
  21.       size_t i, len=strlen(d->d_name);
  22.      
  23.       for(i=0; i<len; ++i)
  24. {
  25.   if(!isdigit(d->d_name[i]))
  26.     {
  27.       return 0;
  28.     }
  29. }
  30.     }
  31.   return 1;
  32. }
  33. /**
  34. * Tri de dirent sur un critere de croissance numerique
  35. */
  36. static int reverse_numsort(const void *a, const void *b)
  37. {
  38.   long unsigned ai, bi;
  39.   if(sscanf((*(const struct dirent **)a)->d_name, "%lu", &ai) != 1
  40.      || sscanf((*(const struct dirent **)b)->d_name, "%lu", &bi) != 1)
  41.     {
  42.       return 0;
  43.     }
  44.   return bi - ai;
  45. }
  46. /**
  47. * Affiche les informations relatives a un processus selon /proc/<pid>/stat  
  48. */
  49. static void print_procinfo(const char *procdir)
  50. {
  51.   char fullpath[sizeof "/proc/" + NAME_MAX + 1 + sizeof "/stat"];
  52.   sprintf(fullpath, "/proc/%s/stat", procdir);
  53.   FILE *F=NULL;
  54.   if((F=fopen(fullpath, "r" )) == NULL)
  55.     {
  56.       perror("fopen" );
  57.       return;
  58.     }
  59.   pid_t pid;
  60.   char name[NAME_MAX + 1];
  61.   if(fscanf(F, "%d (%[^)]s)", &pid, name) == 2)
  62.     {
  63.       printf("pid=%-6d\tname=%s\n", pid, name);
  64.     }
  65.   else
  66.     {
  67.       printf("Erreur\n" );
  68.     }
  69.   fclose(F);
  70. }
  71. int main()
  72. {
  73.   struct dirent **namelist=NULL;
  74.   int n;
  75.  
  76.   n=scandir("/proc", &namelist, is_procdir, reverse_numsort);
  77.  
  78.   if(n < 0)
  79.     {   
  80.       perror("scandir" );
  81.     }
  82.   else
  83.     {
  84.       printf("--- %d processus ---\n", n);
  85.       while(n--)
  86. {
  87.   print_procinfo(namelist[n]->d_name);
  88.   free(namelist[n]);
  89. }
  90.       free(namelist);
  91.     }
  92.   return 0;
  93. }

n°636964
slvn
Posté le 10-02-2004 à 10:32:26  profilanswer
 

thanks :)
 
cependant je viens d'essayer..sous windows, ca pas l'air terrible.
 
je compare au TimeStamp counter (rdtsc)
et ca rien a voir!!! quand le timestamp counter trouve 250 nanosec, windows trouve des trucs hallucinants:  
100144   * 100 nanosecondes !
 
 
 
 

n°636970
slvn
Posté le 10-02-2004 à 10:34:46  profilanswer
 

je vois pas tellement le rapport?!  
 
mais je regarderais ca demain,
ciao
 

Code :
  1. {
  2. HANDLE hProcess = GetCurrentProcess();
  3. FILETIME  ftCreate, ftExit, ftKernel, ftUser;
  4. SYSTEMTIME stCreate, stExit, stKernel, stUser;
  5. GetProcessTimes (hProcess, &ftCreate, &ftExit, &ftKernel, &ftUser);
  6. printf("<br>UserMode  %d * 100 nanosec", ftUser.dwLowDateTime );
  7. printf("<br>KernelMode %d * 100 nanosec", ftKernel.dwLowDateTime );
  8. }


Message édité par slvn le 10-02-2004 à 10:35:30
n°638080
slvn
Posté le 10-02-2004 à 21:25:09  profilanswer
 

SoWhatIn22 >> est ce que tu connais bien la fonction GetProcessTimes ... niveau precision surtout car elle ne semble par tres coherente. :/

n°638449
SoWhatIn22
Posté le 11-02-2004 à 08:11:23  profilanswer
 

nan, désolé.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] comment acceder au donner d'un processus

 

Sujets relatifs
[ASP]acceder à une base access en mode partagé avec aspcomment accéder a une bdd mySQL avec visual c++ 6 et odbc ?
[Java] Acceder a la Base de Registre[C/Unix] Date de création d'un processus
[SQL Server] Ressources lock bloquées par d'autres processusIntégration d'une base de donner format PDF
[Processus] Définir le pid du processus dans lequel lancer le program[ html ] donner de la couleur à "title"
[résolu] accéder à une BDD MySQL sous Linux[conseil a donner inside] Besoin de conseil de debut en prog!
Plus de sujets relatifs à : [C] comment acceder au donner d'un processus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR