IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

lister toute les partition sous linux sans mot de passe en c++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    électricien
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : électricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut lister toute les partition sous linux sans mot de passe en c++
    bonjour je suis débutant en c++ et j'aimerai savoir comment lister les partitions d'un pc sous Linux(même celle qui ne sont pas montées) sans mot de passe(ou avoir la fonction qui permette de le récupérer)
    et j'aimerai savoir comment monter une partition,un fichier iso....
    merci.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Citation Envoyé par DjPopol Voir le message
    bonjour je suis débutant en c++ et j'aimerai savoir comment lister les partitions d'un pc sous Linux(même celle qui ne sont pas montées) sans mot de passe(ou avoir la fonction qui permette de le récupérer)
    et j'aimerai savoir comment monter une partition,un fichier iso....
    merci.
    Les fonctions C / C++ ont souvent le même nom que les commande terminal qui les utilisent.
    Donc:
    - mount -> http://man.developpez.com/man2/mount.2.php

    Depuis la doc de fdisk ->
    -l
    Lister les tables de partitions des périphériques spécifiés et ensuite se terminer. Si aucun périphérique n'est fourni, ceux mentionnés dans /proc/partitions (si ce fichier existe) sont utilisés.
    Donc une lecture de /proc/partitions, ça peut aider. Mais il faut un accès root -> par exemple, en lancant le programme en tant que root.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    électricien
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : électricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,



    Les fonctions C / C++ ont souvent le même nom que les commande terminal qui les utilisent.
    Donc:
    - mount -> http://man.developpez.com/man2/mount.2.php

    Depuis la doc de fdisk ->

    Donc une lecture de /proc/partitions, ça peut aider. Mais il faut un accès root -> par exemple, en lancant le programme en tant que root.
    merci pour ta reponse mais je connaissai déjà c pour celà que je voudrai le faire sans mot de passe ou trouver la fonction pour executer mon programme en root.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Ah pardon ...

    Pour lancer le programme en tant que root:
    su root
    ./monProgramme
    ou sous certains systèmes (Ubuntu):
    sudo ./monProgramme
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par DjPopol Voir le message
    merci pour ta reponse mais je connaissai déjà c pour celà que je voudrai le faire sans mot de passe ou trouver la fonction pour executer mon programme en root.
    Si le système ne t'octroie pas les droits, tu ne pourras pas le faire, sans quoi il s'agirait d'un piratage. Je pense que tu cherches à faire quelque chose qui n'est juste pas possible.
    Find me on github

  6. #6
    Futur Membre du Club
    Femme Profil pro
    électricien
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : électricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    apres pas mal de temp je m'y suis remis et j'ai trouvé une solution et portable en plus

    mais ça ne liste que les partitions montées.(je n'ai pas besoin de plus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    /**  Structure pour stocker les informations des disques  **/
        struct Info_Partition
         {
             Info_Partition(const std::string& New_FileSystem,
                            const double& New_Taille,
                            const double& New_Taille_Use,
                            const double& New_Taille_Disp,
                            const std::string& New_Stat_Use,
                            const std::string& New_Mount_On)
                                : File_System(New_FileSystem),
                                  Taille(New_Taille),
                                  Taille_Use(New_Taille_Use),
                                  Taille_Disp(New_Taille_Disp),
                                  Stat_Use(New_Stat_Use),
                                  Mount_On(New_Mount_On)
                                  {}
     
             std::string File_System;
             double Taille;
             double Taille_Use;
             double Taille_Disp;
             std::string Stat_Use;
             std::string Mount_On;
         };
     
        /**  Partie a mettre dans le main  **/
     
       /**  On utilise la commande df pour les infos '-Bk' pour mettre en Kilo Octets  **/
        FILE* stream = popen("df -Bk", "r" );
         /**  ostringstream pour stocket le resultat de la commade  **/
       std::ostringstream output;
       while( !feof( stream ) && !ferror( stream ))
       {
          char buf[BUFSIZ];
          int bytesRead = fread( buf, 1, sizeof(buf), stream );
          output.write( buf, bytesRead );
       }
     
       std::string ligne;
       std::vector<Info_Partition> List_Info_Partition;
       std::istringstream iss(output.str());
       /** Pour Affichier le resultat  **/
       //std::cout << iss.str() << std::endl;
      //** pour ne pas prendre en compte la premiere ligne  **/
       std::getline(iss, ligne);
       /** parcours iss ligne par ligne  **/
       while( std::getline(iss, ligne))  // tant que l'on peut mettre la ligne dans "contenu"
       {
          std::istringstream iss_l(ligne);
          std::string m_File_System,
                          m_Stat_Use,
                          m_Mount_On,
                          m_Taille_s,
                          m_Taille_Use_s,
                          m_Taille_Disp_s;
     
          iss_l >> m_File_System
                  >> m_Taille_s 
                  >> m_Taille_Use_s
                  >> m_Taille_Disp_s
                  >> m_Stat_Use 
                  >> m_Mount_On;
     
          #if defined (WIN32)
          if(strstr(m_File_System.c_str(),":") != 0 && m_File_System.substr(m_File_System.find_first_of(":") + 1) == "")
           #endif
           #if defined (__linux)
           if(strstr(m_File_System.c_str(),"/dev/") != 0) 
           #endif
          {
              double m_Taille,m_Taille_Use,m_Taille_Disp;
             /** Supprime le 'K' a la fin du string  **/
              m_Taille_s.substr(0,m_Taille_s.size() - 1);
              {
                  /** met Taille_s dans le flux iss_T  **/
                  std::istringstream iss_T(m_Taille_s);
                 /**  met iss_T dans Taille  **/
                  iss_T >> m_Taille;
              }
     
              /** Supprime le 'K' a la fin du string  **/
              m_Taille_Use_s.substr(0,m_Taille_Use_s.size() - 1);
              {
                   /** met Taille_Use_s dans le flux iss_T  **/
                  std::istringstream iss_T(m_Taille_Use_s);
                   /**  met iss_T dans Taille_Use  **/
                  iss_T >> m_Taille_Use;
              }
     
               /** Supprime le 'K' a la fin du string  **/
              m_Taille_Disp_s.substr(0,m_Taille_Disp_s.size() - 1);
              {
                  /** met Taille_Disp_s dans le flux iss_T  **/
                 std::istringstream iss_T(m_Taille_Disp_s);
                 /**  met iss_T dans Taille_Disp  **/
                 iss_T>> m_Taille_Disp;
              }
     
            /** Conversion des tailles en octets  **/
             m_Taille *= 1024;
             m_Taille_Use *= 1024;
             m_Taille_Disp *= 1024;
             List_Info_Partition.push_back(Info_Partition( m_File_System,
                                                           m_Taille,
                                                           m_Taille_Use,
                                                           m_Taille_Disp,
                                                           m_Stat_Use,
                                                           m_Mount_On));
     
          }
       }
     
      /**  affiche Les infos  **/
       for (size_t t = 0;t < List_Info_Partition.size();++t)
       {
          std::cout << "File System : \t" << List_Info_Partition[t].File_System << std::endl
                    << "Taille : \t" << List_Info_Partition[t].Taille << " Octets" << std::endl
                    << "Taille Use : \t " << List_Info_Partition[t].Taille_Use  << " Octets"  <<  std::endl
                    << "Taille Disp : \t " << List_Info_Partition[t].Taille_Disp  << " Octets" << std::endl
                    << "Stat Use : \t" << List_Info_Partition[t].Stat_Use << std::endl
                    << "Mount On : \t " << List_Info_Partition[t].Mount_On << std::end 
                    <<std::endl;     
       }
    Voilà on a acces au info des partition montées avec nom,taille total,taille utilisé,taille disponible,taille dispo en pourcentage et l'endroit ou est monté la partition.(Les Tailles sont en Octets)

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour,

    Citation Envoyé par DjPopol Voir le message
    apres pas mal de temp je m'y suis remis et j'ai trouvé une solution et portable en plus
    C'est une solution très sale et pas portable du tout ! C'est bien de reprendre l'existant lorsque c'est possible, mais pas sans comprendre ce que l'on fait.

    mais ça ne liste que les partitions montées.(je n'ai pas besoin de plus)
    Tu te rends compte, bien sûr, que la totalité de ton programme repose sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FILE* stream = popen("df -Bk", "r" );
    …et que « df » est une commande Shell ! Si pour une raison ou une autre, la commande n'est pas accessible, ou si elle change tout simplement sa façon de présenter les choses à l'écran, ton programme ne peut plus fonctionner.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    électricien
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : électricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour Obsidian,

    Citation Envoyé par Obsidian Voir le message
    Bonjour,



    C'est une solution très sale et pas portable du tout ! C'est bien de reprendre l'existant lorsque c'est possible, mais pas sans comprendre ce que l'on fait.



    Tu te rends compte, bien sûr, que la totalité de ton programme repose sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FILE* stream = popen("df -Bk", "r" );
    …et que « df » est une commande Shell ! Si pour une raison ou une autre, la commande n'est pas accessible, ou si elle change tout simplement sa façon de présenter les choses à l'écran, ton programme ne peut plus fonctionner.
    pour moi ça fonctionne nickel sous windows7 et ubuntu;
    pour l'instant c un programme personnel qui finira par etre un OS à base Linux;

    tu veux que je fasse un controle sur la ligne de commande c ça?

    genre if(stream != NULL) ?

    ou

    FILE* stream = popen("df -T 2>Erreur.txt", "r" ); pour récupérer les erreurs dans 'Erreur.txt'

    (j'utilise -T maintenant pour recuperer le type de partition sous Linux ou si c un périphérique externe ou pas sous Windows)

    2 petite question:

    pour optimiser c'est mieux que je garde les infos dans le vecteur ou dans un fichier txt?

    comment détecter si c'est un périphérique externe ou pas sous Linux?

Discussions similaires

  1. Lister toutes les instances sous jena ontology model
    Par ELALAOUI2 dans le forum Frameworks
    Réponses: 0
    Dernier message: 06/05/2015, 10h59
  2. Réponses: 7
    Dernier message: 05/09/2011, 18h10
  3. Lister toutes les sous-classes d'un classe mère
    Par Kerod dans le forum Langage
    Réponses: 10
    Dernier message: 09/02/2009, 19h21
  4. lister toutes les lettres des partitions
    Par aaron4444 dans le forum C++
    Réponses: 2
    Dernier message: 24/11/2007, 15h47
  5. [debutant] lister tout les mots d'une page web!
    Par kriskikout dans le forum Web
    Réponses: 20
    Dernier message: 31/05/2006, 22h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo