Datei erstellen und Rechte ändern?



  • Hallo,
    ich habe ein kleines C Programm geschrieben, um eine Textdatei zu erstellen.
    Jetzt möchte ich noch die Rechte der Datei in 0700 ändern.
    Leider weiß ich nicht wie das geht. Eventuell kann mir jemand helfen?

    #include <stdio.h>
    
    //using namespace std;
    
    int main(int argc,char *argv[])
    {
    char str[30];
    FILE* f ;
    
    printf("Geben Sie bis zu 30 zeichen ein \n");
    
         fgets(str, 31 ,stdin);
         f = fopen(str,"w"); 
         if (f == NULL){
              perror("fopen");
              }
         else {
              printf("Datei erzeugt \n");
    }
    
    //system("PAUSE");
    return 0;
    }
    




  • Habe das jetzt so gemacht:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    //using namespace std;
    
    int main(int argc,char *argv[])
    {
    char str[30];
    FILE* f ;
    
    printf("Geben Sie bis zu 30 zeichen ein \n");
    
         fgets(str, 31, stdin);
         f = fopen(str,"w"); 
         if (f == NULL){
              perror("fopen");
              }
         else {
              printf("Datei erzeugt \n");
    }
    
        char mode[] = "0700";
        int i;
        i = strtol(mode, 0, 8);
        if (chmod (str, i) < 0) {
            printf("Error");
        }
    
    //system("PAUSE");
    return 0;
    }
    

    Scheint zu funktionieren?



  • Nanana

    char str[30]; // Platz für 29 Zeichen + '\0'
    
     printf("Geben Sie bis zu 30 zeichen ein \n"); //  Wieviel Zeichen? Die '\0' gibst du nicht mit ein.
    
         fgets(str, 31, stdin);  // Fehler! Soviel Platz hast du gar nicht.
    

    Bedenke auch, dass fgets das '\n' (von der Entertaste) mit im String ablegt.
    Dein Dateiname enthält also ein '\n'

    OPTIMUS schrieb:

    //using namespace std;
    

    Machst du jetzt C oder C++?



  • Das soll ein C Programm werden.

    Ich darf maximal 30 Zeichen für den Dateinamen eingeben.



  • Dann mach einfach

    char str[32];  // dateiname passt besser
    

    dann kann der Rest bleiben.

    Die Position vom '\n' kannst du mit strrchr ermitteln.


Anmelden zum Antworten