Zeiger frage bei ofstream



  • Hey,
    wollte fragen wo ich das definiere auf welche datei mein Zeiger zeigt!

    void ofstream::open(const char *pFName, ios::openmode mode=ios::out);
    

    Kann ich den einfach in meiner klasse definieren oder wie läuft das? Ich mein der muss doch wissen welches Verzeichnis ich mein!?

    LG Enno

    EDIT: Ach so die Zeile habe ich von hier: http://www.cpp-tutor.de/cpp/le04/dateien.html

    Dateizugriffe --> Ausgabestream-Objekt definieren



  • ich verstehe die frage nicht ganz.
    pFName = C-string containing the name of the file to be opened. beantwortet das deine frage?



  • Ich glaub ich hab es grade selbst gelöst und zwar das ich mir das oben so definiere:

    #ifdef LINUX
      #define  PROC_THREADS "/proc/fs/nfsd/threads"
    #endif
    

    und in der Funktion so anwende:

    #ifdef LINUX
      WRITEPROC(threads,PROC_THREADS);
      #endif
    }
    


  • Enno schrieb:

    Ich glaub ich hab es grade selbst gelöst und zwar das ich mir das oben so definiere:

    #ifdef LINUX
      #define  PROC_THREADS "/proc/fs/nfsd/threads"
    #endif
    

    und in der Funktion so anwende:

    #ifdef LINUX
      WRITEPROC(threads,PROC_THREADS);
      #endif
    }
    

    Jo, klar. Der Zusammenhang zum oben Stehenden erschließt sich einem auch gleich. 😮

    Du bist blurry333, oder?



  • Nein bin ich nicht!

    Vllcht verstehste nu was ich mein (ist aber irgendwo noch ein Dreher drin ...):

    #ifdef LINUX
      #define  PROC_THREADS "/proc/net/dev"
    #endif
    
    #include "sysinfo.h"
    
    //#ifdef POSIX
    
    namespace exsystem { 
    int SYSInfo::getTotalram(){
      return Totalram;
    }
    
    #ifdef LINUX
    template <class TP>
    void WRITEPROC (TP cmd, const char *path){
      std::ofstream procfile;
      procfile.open(path);
      procfile << cmd;
      procfile.close();
    }
    #endif
    
    void SYSInfo::setDev(const char dev){
      Dev=dev;
      #ifdef LINUX
      WRITEPROC(dev,PROC_THREADS);
      #endif
    }
    
    int *SYSInfo::getDev(){
      return Dev;
    }
    

  • Mod

    Enno schrieb:

    Nein bin ich nicht!

    Du bist irgendwo eingestellt worden/Praktikant, hast zu Anfang eine einfache Testaufgabe bekommen, bei der es darum geht, irgendwelche Statistiken zur Netzwerknutzung unter Linux zu erfassen und bist hoffnungslos überfordert, weil du in deiner Bewerbung maßlos mit deinen Fähigkeiten übertrieben hast. Komme ich der Wahrheit nahe?



  • Warum auch immer Dev nun nicht definiert ist -.-

    fehlermeldung:

    Fehler: »Dev« wurde in diesem Gültigkeitsbereich nicht definiert
    make[2]: *** [src/CMakeFiles/exsystem.dir/sysinfo.cpp.o] Fehler 1
    

    sysinfo.h:

    #include <iostream>
    
    #ifndef SYSINFO_H
    #define SYSINFO_H
    
    namespace exsystem {
    class SYSInfo {
    public:
      int getTotalram();
      void setDev(const char dev);
      const char *getDev();
    private:
      std::string Dev;
    

    sysinfo.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>
    
    #ifdef LINUX
      #define  PROC_THREADS "/proc/net/dev"
    #endif
    
    #include "sysinfo.h"
    
    //#ifdef POSIX
    
    namespace exsystem { 
    int SYSInfo::getTotalram(){
      return Totalram;
    }
    
    #ifdef LINUX
    template <class TP>
    void WRITEPROC (TP cmd, const char *path){
      std::ofstream procfile;
      procfile.open(path);
      procfile << cmd;
      procfile.close();
    }
    #endif
    
    void SYSInfo::setDev(const char dev){
      Dev=dev;
      #ifdef LINUX
      WRITEPROC(dev,PROC_THREADS);
      #endif
    }
    
    const char SYSInfo::*getDev(){
      return Dev.c_str;
    }
    

    und die main.cpp:

    #include "../sysinfo.h"
    
    int main(){  
      exsystem::SYSInfo a; 
      std::cout << "Ram: " << a.getTotalram() << std::endl; 
      std::cout << "Update Networkstat: " << a.getDev() << std::endl;   
      std::cout << "System name: " << a.getSysname() << std::endl;
      std::cout << "Release: " << a.getRelease() << std::endl;  
      std::cout << "Nodename: " << a.getNodename() << std::endl;  
      std::cout << "Maschine: " << a.getMaschine() << std::endl;   
      return 0;
    }
    

    Ich werd bestimmt eh wieder halb gekillt aber fragen kostet halt nichts 😕 wer nicht versucht der nicht gewinnt! Ich lerne aus allen Fehlern! Sry wenn ich zu doof bin!



  • SeppJ schrieb:

    Enno schrieb:

    Nein bin ich nicht!

    Du bist irgendwo eingestellt worden/Praktikant, hast zu Anfang eine einfache Testaufgabe bekommen, bei der es darum geht, irgendwelche Statistiken zur Netzwerknutzung unter Linux zu erfassen und bist hoffnungslos überfordert, weil du in deiner Bewerbung maßlos mit deinen Fähigkeiten übertrieben hast. Komme ich der Wahrheit nahe?

    Habe nicht übertrieben und die wissen das ich nichts weiß also liegst du falsch. Allerdings bin ich wohl mit der Aufgabe überfordert. Obwohl ich schon viel gelernt hab! Merkt man wohl hier nicht so 😞



  • Hey,

    Fehlerzeile angeben.
    Deine '*' scheinen zufällig verteilt zu werden

    void SYSInfo::setDev(const char dev) // hier fehlts wohl
    const char SYSInfo::*getDev() // hier ist es an der falschen Stelle
    


  • Oh ja das kann sein! Kann das grade nur nicht testen 😃

    Fehler Zeile ist Zeile 43 in sysinfo.cpp.

    LG Enno


Anmelden zum Antworten