Systembefehle in Klasse aufrufen



  • Hallo,

    ich moechte die Systemcalls
    int open(const char *pathname, int flags);
    int close(int fd);
    read, write, ...
    in einer Klasse aufrufen in denen es schon Funktionen mit diesem
    Namen gibt.
    ich erhalte da die Fehlermeldung

    no matching function for call to `fm:🇫🇴:close(
    int&)'
    fm.hh:106: candidates are: FileMgr::Status fm:🇫🇴:close()

    std::open(...) habe ich schon probiert, geht aber nicht!
    Kann mir Jemand helfen?



  • 1. Header einbinden:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    

    2. Die Funktionen liegen in keinem Namensraum, außerdem gehören sie zu keiner Klasse. Also schreibt man z.B.:

    ::close(fd);  //die zwei Doppelpunkte bedeuten, dass auf die globale Funktion zugegriffen wird
    


  • Original erstellt von Steven:
    **1. Header einbinden:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    

    **

    wozu sind die header?

    Original erstellt von Steven:
    **2. Die Funktionen liegen in keinem Namensraum, außerdem gehören sie zu keiner Klasse. Also schreibt man z.B.:

    ::close(fd);  //die zwei Doppelpunkte bedeuten, dass auf die globale Funktion zugegriffen wird
    

    **

    das kommt drauf an ob er die das neue cstdio oder das alte stdio.h inculdet hat
    der inhalt von cstdio befindet sich im namespace std (außer beim msvc da er fehlerhafte header hat, dort befindet sich alles in globalen namespace)



  • Original erstellt von Dimah:
    **wozu sind die header?
    **

    Die ersten beiden sind IMHO auf Unix-Systemen übliche Header



  • @Dimah: Die Header sind Unix-spezifische Header für's Dateihandling. Sie haben nichts mit dem C++-Standard zu tun, sondern sind nur nötig, wenn man mit den Unix-Systemaufrufen programmieren will... Die Funktion, die ich als Beispiel verwende, heißt close und nicht fclose (genau lesen...) 😉


Anmelden zum Antworten