Funktion "fstat", zweiter Übergabeparameter unklar



  • Hallo,

    ich habe hier eine Funktion "fstat":

    STATUS fstat(int fd, struct stat *pStat)

    Leider kann ich den zweiten Übergabeparameter nicht nachvollziehen. Was wird denn da übergeben? Eine Struktur namens "stat"? Und was ist das dahinter (also "*pStat")?? Stehe grad total auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht 😞 Bin für jede Hilfe dankbar...



  • struct stat * ist der Typ (Zeiger auf struct stat), pStat ist der Parametername, so wie fd auch ein Parametername ist.



  • Naja sieht wohl nach einem C-Header aus(#include <sys/stat.h>) ... bei C++ würde man eher sowas machen:

    void file::stat(int fildes, stat& destStat) { ... }
    

    Aber naja ^^ Also bleiben wir bei deiner Frage ...

    Wenn du in C programmierst:

    struct stat dest;
    if (fstat(fd, &dest) == 0) {  
        printf("%d", dest.st_dev);
    }
    

    In C++ 😛

    ::stat dest;
    if (::fstat(fd, &dest) != 0)
        std::cerr << "FEHLER: Dateistatus konnte nicht abgerufen werden!" << std::endl;
    else
        std::clog << "Device ID: " << dest.st_dev << std::endl;
    

    🙂



  • Hi,

    also erstmal danke für die Antworten.

    @Bashar: mhm das klingt soweit ganz einleuchtend, aber ist "stat" nicht ein per typedef definierter Strutkurtyp? Warum wird dann das Schlüsselwort struct davorgestellt?

    @(D)Evil: Kann sein dass es auch C ist oder vermischt, weiß ich nicht genau. Was ist denn bei dir das vor stat, dieses "file::". Ist das der namespace? Wenn das der namespace ist, warum muss man dann nicht in der Parameterliste for fildes und destStat auch "file::" schreiben?
    Und das in dem letzten Codeabschnitt den du gepostet hast. Direkt die erste Zeile lautet ja "::stat dest;"
    Muss da vor die "::" nicht noch irgendwas geschrieben werden? So wie oben eben "file"?
    Grüße und danke nochmal!



  • Fruchtmixer schrieb:

    @Bashar: mhm das klingt soweit ganz einleuchtend, aber ist "stat" nicht ein per typedef definierter Strutkurtyp? Warum wird dann das Schlüsselwort struct davorgestellt?

    Anscheinend nicht, sonst hätte man wohl in der Tat das 'struct' weggelassen.



  • Es gibt nämlich zusätzlich noch eine Funktion stat(), daher muß man 'struct stat' schreiben. (Ansonsten gäbe es den Fehler: doppelter Bezeichner)


Anmelden zum Antworten