Kommt nur murks raus
-
also wenn ich bei mir cat /proc/net/dev eingebe zeigt der mir das hier an:
Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 78345 251 0 0 0 0 0 0 78345 251 0 0 0 0 0 0 wlan0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eth0: 6131451 9365 0 0 0 0 0 2522 552388 4420 0 0 0 0 0 0d.h. doch dann wohl das das ein verzeichnis ist was ich auslesen kann? oder verstehe ich da etwas kommplett falsch?
/proc/net/dev The dev pseudo-file contains network device status information. This gives the number of received and sent pack‐ ets, the number of errors and collisions and other basic statistics. These are used by the ifconfig(8) program to report device status.
-
Wie viele Verzeichnisse kennst du, die man mit cat ausgeben kann und die auf der zugehörigen Manpage "pseudo-file" genannt werden?
Ich glaube, HepSepp hat vollkommen recht. Wie viel sollen wir dir eigentlich noch helfen, wenn du die Antworten wegen mangelndem Hintergrundwissen doch nicht verstehst? Zumal dir in schon mehreren Threads Quasi-Komplettlösungen gegeben wurden, die du nicht als solche erkannt hast (siehe vorherige Bemerkung über Verstehen der Antworten).
-
Bassmaster schrieb:
Enno schrieb:
SYSInfo::SYSInfo(){ struct sysinfo *mysys = new struct sysinfo; struct utsname myInfo; if(sysinfo(mysys)!=-1){ Totalram=mysys->totalram/1024; } if (uname(&myInfo) != -1) { SysnameInfo=myInfo.sysname; ReleaseInfo=myInfo.release; NodenameInfo=myInfo.nodename; MachineInfo=myInfo.machine; } } void *SYSInfo::getUpdateNetworkstat(){ std::ifstream UpdateNetworkstat("/proc/net/dev"); return UpdateNetworkstat; }Wie heisst eure Anwendung? Glücksrad für Linux?^^
Machs doch so in der Art: (Fehlerabfragen müsste man noch einbauen)
#include <iostream> #include <fstream> #include <vector> using namespace std; class EineKlasse { private: vector<char>Data; public: void getUpdateNetworkstat ( string filename ); void PrintNetworkstat(); }; void EineKlasse :: getUpdateNetworkstat ( string filename ) { ifstream file( filename.c_str() ); file.seekg(0,ios::end); long size = file.tellg(); file.seekg(0,ios::beg); Data.resize( size + 1); file.read(&Data[0],size ); Data[size]='\x00'; // Nullterminator anhängen, sonst gibt cout lustige ASCII Zeichen mit aus } void EineKlasse :: PrintNetworkstat () { cout<<&Data[0]<<endl; } int main() { EineKlasse abc; abc.getUpdateNetworkstat( "test.txt" ); abc.PrintNetworkstat(); return 0; }wenn ich das nun einbaue bekomme ich diesen fehler:
43:8: Fehler: »class std::vector<char>« hat kein Element namens »resized«@sepp
tut mir leid ich hab nicht alles in diesem thread vorhin gelesen ...
dazu hab ich wirklich kein plan und hab deswegen ja auch in meinem post gefragt ob ich das falsch verstanden habe.
wenigstens versuche ich das alles hier zu lernen udn bin über jede hilfe dankbar wenns dich jedoch nervt dann weiß ich nicht lies es nicht oder lösche das?
-
Wenn du lernen willst, versuch doch mal den Fehler mit dem resized selber zu lösen. Wie würdest du anfangen, wenn du einen solchen Fehler hast? Tipp: Compiler haben immer Recht, es gibt tatsächlich keine Methode "resized" in std::vector.
-
Enno schrieb:
43:8: Fehler: »class std::vector<char>« hat kein Element namens »resized«resized? Gute Guete, du wirst das doch hoffentlich nicht abgetippt haben, oder?

-
SeppJ schrieb:
Wenn du lernen willst, versuch doch mal den Fehler mit dem resized selber zu lösen. Wie würdest du anfangen, wenn du einen solchen Fehler hast? Tipp: Compiler haben immer Recht, es gibt tatsächlich keine Methode "resized" in std::vector.
edit: fail
habs nun erst ganz raus gemacht und dann dort nachgelesen wies heißt
-
Meinst du das eigentlich ernst? Das ist ein Nachbau von vector für C und hat mit std::vector herzlich wenig am Hut. Die richtige Referenz ist hier:
http://www.cplusplus.com/reference/stl/vector/
-
nu bekomm ich halt immer diesen fehler:
Speicherzugriffsfehler (Speicherabzug geschrieben)
-
Das liegt daran, dass du etwas falsch gemacht hast.
Ernsthaft: benutze den Debugger (valgrind oder auch gdb) und finde heraus, in welcher Zeile das passiert.
-
ah danke
-
Da hast du wohl murks gebaut.
-
abgeschrieben halt
-
Habs nun so kannnst auch ohne fehler compelieren aber es erscheint nichts?
void SYSInfo::getDev(std::string filename){ std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); Data[0]='\x00'; } void SYSInfo::printDev(){ std::cout << &Data[0] << std::endl; }namespace exsystem { class SYSInfo { public void printDev(); void getDev(std::string filename); private: std::string Data; std::string Dev;#include "../sysinfo.h" int main(){ exsystem::SYSInfo a; a.getDev( "/proc/meminfo" ); a.printDev(); return 0;
-
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Und warum überhaupt so kompliziert?#include <iostream> #include <fstream> int main() { std::cout << std::ifstream("/proc/meminfo").rdbuf(); }
-
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Hast du auch Text in deiner Datei drin stehen? ...
Oder eventuell nur 1 Zeichen in der Textdatei welches durch den Angehangenen Nullterminator entfernt wird. Nimm mal mein Beispiel und sei dir sicher das in der Textdatei auch Text steht. ^^Und std::vector nimmst du nicht weil du das mit dem resize nicht hinbekommst ... google: CompilerName vector resize
Wäre eventuell in passender Suchbegriff.
-
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Selbst wenn sie es unterstützen würden (tun sie nicht), dann würde folgende Zeile immer noch alles ruinieren:
Data[0]='\x00';
-
MFK schrieb:
Ich glaube nicht, dass Pseudodateien Seek-Operationen unterstützen.
Und warum überhaupt so kompliziert?#include <iostream> #include <fstream> int main() { std::cout << std::ifstream("/proc/meminfo").rdbuf(); }Ich solls mit der Klasse und mit get und set machen! Wäre ja schön wenns so leicht wäre

Bassmaster schrieb:
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }sieht gut aus aber egal wie ich es mache ... also ob in der Klasse oder einfach alles in die Main ... der fehler bleibt:
25:17: Fehler: »Data« wurde in diesem Gültigkeitsbereich nicht definiert }
-
Ich poste noch mal meinen jetzigen Quellentext!
Also das Problem ist das einfach nichts in der Konsole erscheint! Ich hab auch noch mal mit verschiedenen Dateipfaden rum gespielt!
/proc/meminfo
test.txt
/proc/net/dev <-- da ja nicht geht habs aber probiert.h
#include <iostream> #include <vector> #ifndef SYSINFO_H #define SYSINFO_H namespace exsystem { class SYSInfo { public: void getDev(std::string filename); void write(); private: std::string Data; std::string Dev;.cpp
#include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/reboot.h> #include <sys/sysinfo.h> #include <sys/utsname.h> #include <fstream> #include <string> #include <vector> #include "sysinfo.h" void SYSInfo::getDev(std::string filename){ std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } void SYSInfo::write(){ std::cout << Data << std::endl; }main.cpp
#include "../sysinfo.h" #include <fstream> int main(){ a.getDev("test.txt"); a.write(); return 0; }
-
Enno schrieb:
Ich solls mit der Klasse und mit get und set machen! Wäre ja schön wenns so leicht wäre

Ja und?
#include <sstream> #include <iostream> #include <fstream> using namespace std; void SYSInfo::getDev(std::string filename) { istringstream iss; iss << ifstream(filename.c_str()).rdbuf(); Data = iss.str(); } void SYSInfo::write(){ std::cout << Data << std::endl; }
-
@ Enno
liest du dir eigentlich durch was hier gepostet wird oder machst du nur Copy & Paste

In dem Quelltext ist ein kleiner Fehler findest du ihn?
Hinweis: Such mal nach string Data;In diesem Fall hier müsste man das string Data; deklarieren.
Ich hab den Code eben irgendwo zwischen Code von mir gepackt und hab wohl was vergessen mit aus meiner IDE rauszukopieren.

WAS könnte das wohl sein?
#include <iostream> #include <fstream> using namespace std; void getDev(std::string filename) { std::ifstream file(filename.c_str()); file.seekg(0,std::ios::end); long size = file.tellg(); file.seekg(0,std::ios::beg); Data.resize(size + 1); file.read(&Data[0],size); } int main(int argc, char* argv[]) { getDev("test.txt"); cout<<&Data[0]<<endl; //Geht auch so: cout<<Data<<endl; return 0; }Und schau dir mal deine Fehlermeldung an durchlesen und nicht nur kopieren und hier im Forum einfügen ...
»Data« wurde in diesem Gültigkeitsbereich nicht definiert
Besser wäre es sowieso wenn du Data als Referenz an die Funktion übergeben würdest.
Aber bei deinem bisherigen Code hast du ja im moment Data in der Klasse unter private stehen das is ja auch eigentlich ok.
Aber lass erst mal deine Klasse weg und versuch nur mein simples Beispiel ans laufen zu bekommen danach solltest du das auch in deine Klasse einbauen können.
Und kauf dir das Buch: http://www.amazon.de/Einführung-die-Programmierung-Pearson-Studium/dp/3868940057
@ Enno ich hab dir doch den C++ Primer per Email geschickt hast du da eigentlich mal reingeschaut? Oder hab ich den wem anderes geschickt mhhm
