struct stat FileInfo ?



  • hallo,
    was genau macht dieser Code:

    ich nutzte die Funktion:

    stat -> get file status

    definition:

    int stat(const char *path, struct stat *buf);
    

    ich benötige also einen
    char path[20]= "/home/user/datei.txt";

    was genau heisst nun:
    struct stat *buf

    es gibt in der includierten Header Datei "da wo auch stat liegt" eine struktur die ich für mein Rückgabewert benutzen muss?
    Ich frage mich manchmal, warum reicht kein string aus?

    struct stat FileInfo;
    

    was kann ich dann mit Fileinfo machen?

    das int reicht mir schon aus...

    danke vom (anfänger)



  • Bahnhof...

    greetz, Swordfish



  • 😕

    struct stat buf;
    stat("pfad", &buf);
    

    Ich frage mich manchmal, warum reicht kein string aus?

    Und was soll drinstehen? "Hallo, lieber Anwender, die Datei xyz.exe ist 123.432 Bytes groß und wurde am 01.01.2008 um 13:45 zuletzt geändert. Ausserdem gehört sie Klausdieter, der sie jedoch nur lesen darf."

    Da finde ich eine Struktur wo die Daten unverschlüsselt abgelegt sind doch schöner 😃



  • "Hallo, lieber Anwender, die Datei xyz.exe ist 123.432 Bytes groß und wurde am 01.01.2008 um 13:45 zuletzt geändert. Ausserdem gehört sie Klausdieter, der sie jedoch nur lesen darf."

    Fände ich auch viel besser, wenn der Rechner öfter mal in Deutsch mit mir kommunizieren würde, anstatt z.B. einfach abzustürzen 😃 (ich habe manchmal das Gefühl, der Rechner ist eigentlich viel intelligenter als ich und tut nur so, als ob er mich nicht versteht -)



  • anfänger222 schrieb:

    int stat(const char *path, struct stat *buf);
    

    was genau heisst nun:
    struct stat *buf

    Das heisst folgendes: du hast eine Funktion namens stat, die zwei Argumente nimmt, eins vom Typ const char* und einen Zeiger auf den Typen stat (der, da es sich um eine C-Routine handelt, ein struct ist). Das Schluesselwort struct steht hier nur deshalb, damit der Compiler zwischen dem namen der Funktion udn den Namen des Typen unterscheiden kann. (es sei denn in C muss immer dann, wenn ein struct-Typ uebergeben wird, das schluesselwort struct stehn, kenn mich da nicht gut genug aus.)

    man koennte es auch wie folgt schreiben:

    struct stat {
      /*...*/ 
    }; //die definition steht irgendwo in der Bilbiothek die du da nutzt
    
    typedef stat MyStatStruct; //anderer Name um bisserl Klarheit zu schaffen bzw. Mehrdeutigkeiten zu verhindern
    
    int stat(const char* path, MyStatStruct* buf);
    

    Ich wuerde, wenn du viel mit der Bilbiothek arbeiten musst, evtl. eine Wrapperklasse schreiben um das C-style jonglieren mit pointern und const char* aus dem eigentlichen Code rauszuhalten.



  • pumuckl schrieb:

    (es sei denn in C muss immer dann, wenn ein struct-Typ uebergeben wird, das schluesselwort struct stehn, kenn mich da nicht gut genug aus.)

    Ja, muß es - in C mußt du die Schlüsselwörter 'struct', 'enum' und 'union' bei den Typnamen mit angeben - oder du definierst einen Namen über typedef:

    typedef struct stat
    {
      ...
    } stat_t;
    
    //Verwendung:
    struct stat Info;//in C++ funktioniert auch 'stat Info;'
    stat_t Info;
    


  • Ihgitt. Ich weiß schon warum ich bei C++ bleib 😉


Anmelden zum Antworten