Need a unique gift idea?
A Pastebin account makes a great Christmas gift
SHARE
TWEET

Process Under Linux

a guest Jul 1st, 2012 19 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
 
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <map>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <pwd.h>
  9.  
  10. int strToInt(std::string value){
  11.         std::istringstream temp(value);
  12.         int returned;
  13.         temp >> returned;
  14.         return returned; // Retourne la valeur si value était un nom "numérique", 0 dans le cas contraire.
  15. }
  16. int main(int argc, char* argv[]){
  17.        
  18.         std::ifstream subInput; // Ouverture des fichiers /proc/<PID>/status
  19.         std::stringstream fileName; //  
  20.         std::string buffer, name, value; // Name et Value sont des variables que l'on utilise pour parser le fcihier /proc/<PID>/status
  21.         std::map<std::string,std::string> process; // "tableau associatif", on associe chaque propriété du processus à sa valeur
  22.         DIR *dir;
  23.         struct dirent *subDir;
  24.         dir = opendir("/proc/"); // On ouvre le /proc pour lister les processus
  25.         while(subDir = readdir(dir)){ // tant qu'il y a des sous dossiers
  26.                 if(strToInt(subDir->d_name)){ // On vérifie si le nom du dossier est numérique
  27.                         fileName.str(""); // Vide le flux du nom du fichier
  28.                         fileName << "/proc/" << subDir->d_name << "/status"; // Récupération du status correspondant au processus qu'on lit
  29.                         subInput.open(fileName.str().c_str(), std::ios::in);
  30.                         while(!subInput.eof()){ // Lecture de l'intégralité du fichier status du processus
  31.                                 /*
  32.                                    ce passage est le plus "complexe" du code, en effet, on récupère la ligne du fichier, et on la stocke dans un stringstream,
  33.                                    pourquoi ne pas directement lire les valeurs de la ligne dans les variables ?
  34.                                    Car comme vous avez pu le constater, une propriété à parfois plusieurs valeurs, il y aurait donc un problème lors de la lecture du fichier.
  35.                                    Si quelqu'un à une autre méthode (sans utiliser sscanf ou fscanf) cela m'interesse.
  36.                                 */
  37.                                 std::stringstream bufferString;
  38.                                 getline(subInput,buffer);
  39.                                 bufferString << buffer;
  40.                                 bufferString >> name >> value;
  41.                                 process.insert(std::pair<std::string,std::string>(name,value)); // On associe la propriété à sa valeur
  42.                         }
  43.                         std::cout << process["Name:"] << " " << process["Pid:"] << " " << getpwuid(strToInt(process["Uid:"]))->pw_name << std::endl;
  44.                         /*
  45.                            Affichage du résultat, tout simplement, petite subtilité pour récupérer le nom d'utilisateur à partir de l'UID, je vous revois à la fonction
  46.                            http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/getpwuid.3.html
  47.                         */
  48.                         subInput.close();
  49.                         process.clear();
  50.                 }
  51.         }
  52. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top