mkdir() verwenden



  • hallo,

    Ich möchte auf einem Gnu/Linux System ein Verzeichnis erstellen lassen:

    #include <dirent.h>
    
    using namespace std;
    
    int main()
    {
      string artist = "Test";
      mkdir(artist);
    }
    

    Jedoch:
    error: ‘mkdir’ was not declared in this scope

    bei der Funktion chdir() tritt dieser Fehler nicht auf. Was mache ich falsch?



  • Ich vermute mal falscher Header:
    http://www.imb-jena.de/~gmueller/kurse/c_c++/c_file.html
    Da findest du was dazu.

    Gruß Kimmi



  • Laut diesem Link stimmt der Header, ich habe nun dennoch dir.h> getestet.

    Das Ergebnis bleibt gleich, auch mit:

    mkdir(test,777);
    

  • Mod

    Der Header für mkdir() ist <sys/stat.h>.

    Sollte aber eher ins Linux Unterforum, da kann dir jedenfalls besser geholfen werden, falls noch Folgefragen auftreten.



  • Nun wird das Programm kompilliert, es scheint aber als würde die Funktion einfach übersprungen: es wird kein Verzeichnis erstellt.


  • Mod

    dir schrieb:

    Nun wird das Programm kompilliert, es scheint aber als würde die Funktion einfach übersprungen: es wird kein Verzeichnis erstellt.

    1. Zeig mal das genaue Programm, dass du jetzt benutzt.
    2. Hast du den Rückgabewert von mkdir geprüft? Dieser sollte sagen, was falsch gelaufen ist.
    3. Hast du auch an den 'mode' (also das zweite Argument von mkdir) gedacht? Ich weiß jetzt nicht, was da der default-Wert ist. Möglicherweise wird da ein Verzeichnis erstellt, das nur root sehen kann.



  • #include <iostream>
    #include <string>
    #include <tag.h>
    #include <dirent.h>
    #include <sys/stat.h>
    
    using namespace std;
    
    int main()
    {
      string artist = "test";
      string directory = "/home/nick/";
    
      chdir(directory);
      mkdir(artist, 777);
    }
    
    locate test
    

    führt übrigens zu der Erkenntnis dass das Verzeichnis tatsächlich nicht da ist. Der Quellcode oben ist auf die betreffenden Zeilen stark gekürzt.



  • #include <sys/stat.h>
    int mkdir(const char *path, mode_t mode);

    Path ist vom Typ const char*, den Zeiger holst du dir mit artist.c_str().

    Gruß,
    B.B.



  • Du solltest überprüfen ob die Operationen überhaupt erfolgreich waren. Am besten schreibst du dir einen kleinen Wrapper, damit der Code leserlich bleibt.

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <tag.h>
    #include <dirent.h>
    #include <sys/stat.h>
    
    using namespace std;
    
    int main()
    {
      string artist = "test";
      string directory = "/home/nick/";
    
      if(chdir(directory.c_str()) == -1) {
        cerr << "Fehler in chdir: " << strerror(errno) << endl;
      }
      else if(mkdir(artist.c_str(), 0777) == -1) {
        cerr << "Fehler in mkdir: " << strerror(errno) << endl;
      }
    }
    

    Und 0777 != 777 🙂

    @op
    ➡ Linux 🙂



  • Dieser Thread wurde von Moderator/in pumuckl 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.



  • Ein kleiner Tipp:

    1.) man 3 mkdir
    2.) Bitte hört auf das Oktalsystem zu nutzen (0777) nutzt dafür die file mode BITS (mode_t mode) zu finden unter man stat.h

    Ein Beispiel:

    /*Ihr braucht nur die beiden */
    #include <sys/types.h>
    #include <sys/stat.h>
    
    int status;
    status = mkdir("/home/cnd/mod1", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
    

    Gruß
    zyon


Anmelden zum Antworten