Anzeigen lassen



  • Ich mal wieder ...
    Meine Frage ist ob ich mir hier von die ganze Zeile nazeigen lassen kann:

    eth0: [b]41783831[/b]   60285    0    0    0     0          0      8599  6919006   45033    0    0    0     0       0          0
    

    Im Moment zeigt er nur das dick markierte an.

    Mein Code:

    using namespace std; 
      int lo = -1; 
      int eth = -1;
      ifstream datei("/proc/net/dev"); 
      for( std::string wort; (lo < 0 || eth < 0) && datei >> wort ; ){ 
       if( wort == "lo:" ) 
         datei >> lo; 
       else if( wort == "eth0:" ) 
         datei >> eth; 
       } 
       if( datei ) 
         cout << "lo wert: " << lo << " eth0 wert: " << eth << endl; 
       else 
         cerr << "Fehler beim Lesen/Parsen" << endl;
    


  • Wie anzeigen? Wo anzeigen? Was willst du überhaupt genau machen? Sag am besten, was du genau erreichen möchtest, mit deinem Programm. 😉



  • Im Moment wird das dann einfach auf der Konsole ausgegeben:

    lo wert: 312772 eth0 wert: 41775771
    

    Ich will nun aber die ganze Zeile und nicht nur die erste Zahl dort ausgeben!

    LG Enno


  • Mod

    Lies eben den ganzen Rest der Zeile ein, nicht bloß die erste Zahl. Falls du nur anzeigen und nicht rechnen möchtest, bietet sich ein string und getline an.

    @Uneingeweihte: Die /proc/net/dev Datei auf Unixsystemen sieht in der Regel so oder ähnlich aus:

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
        lo:110716098  974359    0    0    0     0          0         0 110716098  974359    0    0    0     0       0          0
      eth0:21544273931 27714585    0    0    0     0          0         0 946316717 6626378    0    0    0     0       0          0
    


  • lo und eth sind int. Da kannst du keine ganzen Zeilen drin speichern, sondern jeweils genau eine Zahl



  • Hab es nun so geschrieben, frage ist nun wie ich es hin bekomme bestimmte Zeilen zu bekommen und nicht nur die erste?

    std::ifstream einlesen("/proc/net/dev");
      std::string buffer;
      getline(einlesen,buffer);
      std::cout << buffer << std::endl;
      einlesen.close();
    

  • Mod

    Wodurch zeichnet sich deine "bestimmte" Zeile denn aus?



  • Hab es nun so gelöst aber das gefällt mir nicht so!
    Hab auch was von seekp() gelesen allerdings hat das bei mir nicht funktioniert!

    std::ifstream einlesen("/proc/net/dev");
      std::string buffer;
      getline(einlesen,buffer);
      getline(einlesen,buffer);
      getline(einlesen,buffer);
      std::cout << buffer << std::endl;
      getline(einlesen,buffer);;
      getline(einlesen,buffer);
      std::cout << buffer << std::endl;
      einlesen.close();
    

    meine bestimmten Zeilen sind hier dick:

    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
       [b] lo:  372764    1240    0    0    0     0          0         0   372764    1240    0    0    0     0       0          0[/b]
     wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      [b]eth0: 47569242   71029    0    0    0     0          0     10609  8201633   52779    0    0    0     0       0          0[/b]
    

  • Mod

    Und das besondere soll sein, dass die Worte "lo" oder "eth0" in der Zeile stehen?

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
      using namespace std;
      const char* keywords[] = {"lo", "eth0"};
      ifstream in("/proc/net/dev");
      for (string line; getline(in, line);)
        for (const char* word : keywords)
          if (line.find(word) != string::npos)
            cout << line << '\n';
    }
    

    P.S.: C++ ist hier die Nuklearartillerie auf die Spatzen. Wie wäre es mit grep? Oder möchtest du in Wirklichkeit etwas ganz anderes erreichen?



  • Genau das wollte ich machen vielen dank!


Anmelden zum Antworten