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;
} |