Verwendung chmod() Funktion
-
Naja, das "%d" in scanf gibt ja an, daß die Eingabe als Dezimalzahl gelesen werden soll. Das Äquivalent für Oktalzahlen ist "%o".
-
Torben schrieb:
was meinst du mit "wie gewollt"?
Basis 0 bei strtol bedeutet, dass er die Basis selbst interpretiert. Also "666" wird zu (dezimal) 666, "0x666" zu 1638 und "0666" zu 438.
Die Linux-Dateimodi werden aber oktal codiert, also ist 0666 beim chmod korrekt. Dezimal müsste dort demnach 438 stehen, damit 0666 rauskommt. Beim scanf eben mit %o interpretieren, damit auch "666" zu 438 wird
-
Du könntest auch einfach %i benutzen, dann wird 666 0x666 und 0666 entsprechend interpretiert.
-
Hallo probiers mal so müsste funktionieren ich kanns gerade nicht testen.
Aber system nicht in Anwendungen benutzen welche sehr sicher sein sollen !
[cpp]
#include <iostream>
#include <stdio>
using namespace std;int main()
{string file = "datei ";
string mode = "777";string command = "chmod " + file + mode;
system( command.c_str() );
system("PAUSE");
}[/code]
-
[/code] <-- o_O sry Hallo probiers mal so müsste funktionieren ich kanns gerade nicht testen. Aber system nicht in Anwendungen benutzen welche sehr sicher sein sollen ! [cpp] #include <iostream> #include <stdio> using namespace std; int main() { string file = "datei "; string mode = "777"; string command = "chmod " + file + mode; system( command.c_str() ); system("PAUSE"); }
-
@sup, du bist ja hart drauf, willst zwei Prozesse starten um ein bischen Parsen für einen System-Call-Aufruf zu vermeiden
-
Linux-User schrieb:
@sup, du bist ja hart drauf, willst zwei Prozesse starten um ein bischen Parsen für einen System-Call-Aufruf zu vermeiden
aber wieso sollte ich hier einen system() Aufruf verwenden? chmod() gibt des doch auch als Funktion. Und eben die will ich auch nutzen.
-
dooooomi schrieb:
Naja, das "%d" in scanf gibt ja an, daß die Eingabe als Dezimalzahl gelesen werden soll. Das Äquivalent für Oktalzahlen ist "%o".
Das ist die Lösung, die ich gesucht habe. Danke!
-
noch eine Frage ... und wenn icb den Modus nicht per scnaf ermittle sondern übergeben bekomme, sie also in meiner Funktion dezimal gespeichert habe, wie kann ich die dann in Oktal umwandeln, damit ich sie für den chmod() verwenden kann?
-
Torben schrieb:
noch eine Frage ... und wenn icb den Modus nicht per scnaf ermittle sondern übergeben bekomme, sie also in meiner Funktion dezimal gespeichert habe, wie kann ich die dann in Oktal umwandeln, damit ich sie für den chmod() verwenden kann?
Übergeben als Zeichenkette, oder in einem Integer? Falls letzteres solltest du dir unbedingt einmal das hier durchlesen.
-
Wenn Du den Modus übergeben bekommst, und der Wert dezimal 666 ist, dann hat der übergebende etwas falsch gemacht.