ifstream ofstream berechtigungen ?



  • Hallo,
    wie setzt man denn die Berechtigungen einer datei ?
    Ein Beispiel.
    Ich kopiere ein file von a nach b .

    std::ifstream oldfile(derpfa.c_str(),std::ios::app);
             if(!oldfile)
             {
             std::cout << "konnte datei nicht oeffnen \n";
             return -1;
             }
            std::ofstream newfile(initlppath.c_str(),std::ios::app);
            if(!newfile)
            {
            std::cout << "konnte die Zieldatei nicht anlegen \n";
            return -1;
            }
            char c;
            while (oldfile.get(c))
            newfile.put(c);
    

    die Berechtigungen des Original Files

    -rwxr-xr-x
    

    die Berechtigungen der Kopie

    -rw-r--r--
    

    in dem Verzeichniss in das das File kopiert wird habe ich volle Berechtigung.

    Wie kann ich den nun die Berechtigungen angeben.

    gruß

    central



  • Auf C++-Ebene kannst du das gar nicht. Berechtigungen sind eine Angelegenheit des Betriebssystems und da mischt sich C++ nicht ein (btw, Windows würde mit dem UNIX-Berechtigungskonzept nur den Kopf schütteln). Also müsstest du bei systemspezifischen Funktionen nachsehen (ich tippe mal auf man: chmod(2)



  • Danke 🙂 ,
    das funktioniert,
    Was mich aber wundert ist das die Dateiberechtigungen sich beim kopieren ändert,
    folglich müsste man doch auch die Fileattribute direkt mit übergeben können.

    gruß

    central



  • Aus Sicht des Betriebssystems kopierst du ja auch gar nichts - du legst eine neue Datei an und füllst sie anschließend mit willkürlichen Daten (daß diese dem Inhalt einer anderen Datei entsprechen, ist "Zufall"). Und eine neue Datei bekommt zunächst die Default-Berechtigungen des Systems zugewiesen.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • die frage die man sich auch noch stellen könnte, was ist bei der programmierung unter linux besser ein ifstream oder filedescriptoren die ja unix spezifisch sind?!



  • Das kommt sicher darauf an ob Du standardkonform (== portabel) oder lieber möglichst systemnah programmieren möchtest. Auf jedenfall sind FDs und die Funktionen dazu kein C++ 😉



  • LordJaxom schrieb:

    Das kommt sicher darauf an ob Du standardkonform (== portabel) oder lieber möglichst systemnah programmieren möchtest.

    standardkonform wäre mir in meinem fall überhaupt nicht wichtig, da ist mir die performance schon wichtiger. und da weiß ich nie was in dieser hinsicht das bessere ist?

    LordJaxom schrieb:

    Auf jedenfall sind FDs und die Funktionen dazu kein C++ 😉

    wie so viele andere sachen die nur unter linux gehen ... 😞



  • taff schrieb:

    standardkonform wäre mir in meinem fall überhaupt nicht wichtig, da ist mir die performance schon wichtiger. und da weiß ich nie was in dieser hinsicht das bessere ist?

    Standardkonform heißt nicht zwangsläufig unperformant.

    Und wenn Du glaubst, dass irgendwo die Performance Scheiße ist, dann misst Du nach und besserst notfalls aus.


Anmelden zum Antworten