MemTotal anzeigen



  • Hallo,
    Ich versuche ganz verzweifelt unter Linux
    einen Programm zu schreiben was dir anzeigt wv
    Arbeitspeicher dein Rechner hat .

    fstream fout;
    char buffer[1024];
     char* match;
     fout.open("/proc/meminfo",ios::out | ios::in);
     while(fout.good())
     {
          fout>>buffer;
     }
     match = strstr(buffer,"MemTotal");
     if(match==NULL) exit(1);
     wxString mystring(match, wxConvUTF8);
       textctrl2->SetValue(mystring);
    

    Irgendwie schliesst das Programm wenn ich auf button klick ...
    Das gleiche Programm hab ich mit C geschafft mit Filedeskriptor.

    Grüsse



  • Was genau denkst du macht Zeile 7?



  • Die Datei sieht so oder so ähnlich aus:

    MemTotal:       16151304 kB
    MemFree:         4449084 kB
    Buffers:               8 kB
    Cached:          8077000 kB
    SwapCached:            0 kB
    Active:          6641884 kB
    Inactive:        2220244 kB
    Active(anon):     797468 kB
    Inactive(anon):   173136 kB
    Active(file):    5844416 kB
    Inactive(file):  2047108 kB
    Unevictable:           8 kB
    Mlocked:               8 kB
    SwapTotal:             0 kB
    SwapFree:              0 kB
    Dirty:              2652 kB
    Writeback:             0 kB
    AnonPages:        785484 kB
    Mapped:          2358368 kB
    Shmem:            185484 kB
    Slab:             491160 kB
    SReclaimable:     429792 kB
    SUnreclaim:        61368 kB
    KernelStack:        3304 kB
    PageTables:        19676 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     8075652 kB
    Committed_AS:    6193684 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:      321872 kB
    VmallocChunk:   34359315727 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:        8192 kB
    DirectMap2M:    16488448 kB
    

    Wieso willste diese Datei zum Schreiben öffnen?
    Also damit kriege ich eine Zahl, auch wenn der Code nur mal kurz hingeschmiert ist, das wirste besser machen können:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        ifstream in("/proc/meminfo");
        string name;
        int value;
        while(in>>name>>value && in.ignore(1000,'\n')){
            if(name=="MemTotal:")
                cout<<name<<value<<'\n';
        }
    }
    


  • Hmm ich hab fstream schon lange nicht verwendet aber ich glaub
    damit konnte man doch des was in der Datei meminfo ist raus lesen.



  • AirTrake schrieb:

    Hmm ich hab fstream schon lange nicht verwendet aber ich glaub
    damit konnte man doch des was in der Datei meminfo ist raus lesen.

    Nein, wirklich!

    Edit: Wenn du Windows hättest: GetPhysicallyInstalledSystemMemory()



  • Oder auf Linux:

    #include <sys/sysinfo.h>
    #include <iostream>
    #include <complex>
    #include <iomanip>
    
    unsigned getAmountOfRAM()
    {
        struct sysinfo i;
    
        if(!sysinfo(&i))  
            return i.totalram;
    
        return 0;
    }
    
    int main()
    {
        std::cout << "Amount of System Memory: " << std::fixed << std::setprecision(2) << static_cast<float>(getAmountOfRAM()) / 1024 
        << " Megabytes\n";    
    }
    

    Getestet



  • Ich bin gerade am lernen wie man mit dem System umgeht usw. deswegen waers mir
    lieber ohne funktionen . Ich weis aber nicht was ich falsch mach.



  • @Hacker: Gib doch einfach -1 zurück, oder wirf einen runtime_error. Aber sicher keinen logic_error.



  • 314159265358979 schrieb:

    @Hacker: Gib doch einfach -1 zurück, oder wirf einen runtime_error. Aber sicher keinen logic_error.

    Editiert. Ich war in Eile (ohne Scheiß) 😉
    Und, falls es dir noch nicht aufgefallen ist, der Rückgabetyp ist unsigned. Da geb ich lieber einfach 0 zurück.



  • Ja und wie kann ich des jetzt mit fstream machen?



  • Upss Volkard hab dein beitrag nicht gesehen Super 1 Klappt 🙂

    Vielen Dank an alle!


Anmelden zum Antworten