zugriffsrechte bei open()



  • hi,

    ich erstelle per

    open("copied_file.txt",O_RDWR|O_CREAT,0777);
    

    eine datei, in die dann per write() etwas hineingeschrieben wird.

    das passiert auch (zieldatei ist tatsächlich so gross wie quelldatei),
    und in der vorschau vom ubuntu filemanager erkennt man auch
    die ersten paar textzeilen in der "copied_file.txt".

    allerdings kann ich sie nicht öffnen.
    ubuntu meldet:

    "copied_file.txt" is an executable text file.

    ich kann dann nur "cancel" klicken, oder "run", womit aber gar nix passiert (was ja auch irgendwo klar ist, es ist ja nur text!.

    liegt das irgendwie an den rechten, oder stimmt da woanders etwas nicht?

    (in letzterem fall geb ich euch schritt für schritt meinen genauen code, denn ich mach das nicht direkt per write() sondern über einige hilfsfunktionen, das programm ist etwas umfangreicher..)

    danke 🙂



  • hdi schrieb:

    allerdings kann ich sie nicht öffnen.
    ubuntu meldet:

    "copied_file.txt" is an executable text file.

    Ubuntu meldet sich 😮 😕 ? Du meinst eher dein Filemanager, oder?

    hdi schrieb:

    ich kann dann nur "cancel" klicken, oder "run", womit aber gar nix passiert (was ja auch irgendwo klar ist, es ist ja nur text!.

    dito, siehe oben. Wenn du eine Konsole aufmachst und 'less copied_file.txt' eingibst, wirst du die Datei lesen können, also ein klassisches PEBKAC Problem.

    hdi schrieb:

    liegt das irgendwie an den rechten, oder stimmt da woanders etwas nicht?

    natürlich, du setzte in open ja 0777 als Rechte, d.h. rwx für alle. Dein Filemaneger sieht, deine Datei ist ausführbar und verucht sie auszufühen, was ja nicht gehen kann, weil sie weder ein Shell-Skript noch eine Binary ist. 0644 als Rechte hätte vollkommen ausgereicht. Mach ein 'ls -al copied_file.txt' und siehe selber, was du da kriegest.

    Ansonsten RTFM 😉 man: open(2)



  • ahh, okay dankeschön!

    ich wusste gar nicht, dass man auf "zuviel" rechte geben kann.

    aber das interessiert mich, ich verstehe es nicht so ganz..

    worin liegt der genaue unterschied zwischen 0664 und 0777 ?

    beinhaltet die 7 etwa das execute und daher versucht er auch krampfhaft, es zu executen?



  • EDIT: Problem mit execlp()

    wollte dafür nicht nen neuen thread aufmachen, da ihr profis das bestimmt mit einem kleinen satz gelöst habt.

    und zwar kann ich z.B. aufrufen:

    execlp("./program","./program",NULL);
    

    aber wie übergebe ich argumente?

    ich habe ein:

    char argument[10];
    

    in dem ein char gesaved ist, aber der aufruf:

    execlp("./program","./program",argument);
    

    geht überhaupt nicht, er kehrt also zurück, was ja bei exec nicht so sein sollte.

    auch:

    execlp("./program",argument,NULL);
    

    geht nicht.

    ich habe im internet gesucht nach der definition, und auch die manpage gelesen, aber es geht einfach nicht.
    was mach ich falsch?

    danke euch :xmas1:



  • ich hab nicht verstanden, was du meinst, weil du dich einfach falsch ausdruckst. Zu den Zugriffsrechten unter Unix siehe https://wiki.schokokeks.org/Unix_Zugriffsrechte



  • supertux, du hattest das schon richtig interpretiert 😉

    also du hast mir schon geholfen, ich komme jetzt eben bei der parameterübergabe von execlp nicht weiter, und ich finde ni den manpages etc. darüber keine lösung, warum es nicht hinhaut bei mir.



  • hdiloggout schrieb:

    supertux, du hattest das schon richtig interpretiert 😉

    also du hast mir schon geholfen, ich komme jetzt eben bei der parameterübergabe von execlp nicht weiter, und ich finde ni den manpages etc. darüber keine lösung, warum es nicht hinhaut bei mir.

    was ist denn so schwer an man exelp? Ansonsten gibt es das Orakel von Delphi (Google). Siehe man: execlp(2)


Anmelden zum Antworten