Kommt nur murks raus
-
Oops ja stimmt, mein Fehler habs oben korrigiert.
-
Enno schrieb:
@Tachyon
Ich wollte den kram den in dem Verzeichnis "/proc/net/dev" zurück geben ... geht das so nicht?/proc/net/dev ist unter Linux aber kein Verzeichnis. Bitte informiere dich doch einfach erstmal, bevor du wild irgendeinen Unsinn durch den Compiler jagst. Mit proc(5) (einfach "man 5 proc" auf der Konsole eingeben) könntest du anfangen.
Ein Buch über C++ und Unix/Linux wäre aber auch nicht verkehrt. "The Linux Programming Interface" von Michael Kerrisk ist hier ein recht umfassendes und dennoch aktuelles Buch von ordentlicher Qualität.
-
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; }