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 0Im 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: 41775771Ich will nun aber die ganze Zeile und nicht nur die erste Zahl dort ausgeben!
LG Enno
-
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();
-
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]
-
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!