Berechtigungen einer Datei auslesen
-
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Berechtigungen einer Datei auslesen
Ich würde gerne in Linux die Berechtigungen einer Datei mit auslesen. Das Ergebnis sollte dann so etwas sein wie "777".
Bisher habe ich dazu nur die Funktion FpAccess gefunden, diese Funktion liefert mir aber lediglich die Flags des aktuellen Nutzers. Wie ist es möglich alle Flags zu bekommen, also auch die für die Gruppe und andere? Gibt es da auch eine Funktion für?
Bisher habe ich dazu nur die Funktion FpAccess gefunden, diese Funktion liefert mir aber lediglich die Flags des aktuellen Nutzers. Wie ist es möglich alle Flags zu bekommen, also auch die für die Gruppe und andere? Gibt es da auch eine Funktion für?
Re: Berechtigungen einer Datei auslesen
FpStat könnte Dir weiterhelfen, wenn ich Dich richtig verstehe.
Nachtrag:
Der Name der Gruppe beziehungsweise des Benutzers kann dann mit GetGroupName/GetUserName der Unit users ermittelt werden.
Nachtrag:
Der Name der Gruppe beziehungsweise des Benutzers kann dann mit GetGroupName/GetUserName der Unit users ermittelt werden.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Berechtigungen einer Datei auslesen
Mit dem Gegenstück kann ich dienen, dieses setzt ein neues Flag.
Vielleicht hilft dir dies ein bisschen weiter.
Vielleicht hilft dir dies ein bisschen weiter.
Code: Alles auswählen
FN := 'convert.sh';
fpChmod (FN, &777);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Re: Berechtigungen einer Datei auslesen
Ich hatte mir fpStat auch schon angesehen bzw vermutet dass es damit klappen könnte. Man bekommt auch eine Menge zurück in Form eines Records, aber die Permissions habe ich darin nicht gefunden. Oder habe ich da etwas übersehen?
Den Namen der Gruppe suche ich übrigens nicht, es geht einfach nur um die Zahl wie 777 oder auch rwxrwxrwx je nach Schreibweise, eben genau das Gegenstück von chmod wie Mathias schon sagte.
Den Namen der Gruppe suche ich übrigens nicht, es geht einfach nur um die Zahl wie 777 oder auch rwxrwxrwx je nach Schreibweise, eben genau das Gegenstück von chmod wie Mathias schon sagte.
Re: Berechtigungen einer Datei auslesen
Die Zugriffsrechte befinden sich in mode/st_mode
Natürlich binär und nicht als Zeichenkette. Diesbezüglich ist mir keine vorgefertigte Funktion bekannt (Oktal->Zeichenkette).
... Falls es von Interesse sei sollte, eine indirekte Beschreibung für FpStat: http://linux.die.net/man/2/stat
Natürlich binär und nicht als Zeichenkette. Diesbezüglich ist mir keine vorgefertigte Funktion bekannt (Oktal->Zeichenkette).
... Falls es von Interesse sei sollte, eine indirekte Beschreibung für FpStat: http://linux.die.net/man/2/stat
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Berechtigungen einer Datei auslesen
Vielleicht hilft dies weiter: http://www.entwickler-ecke.de/viewtopic ... 70&view=dlDiesbezüglich ist mir keine vorgefertigte Funktion bekannt (Oktal->Zeichenkette).
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Berechtigungen einer Datei auslesen
Zuletzt geändert von creed steiger am Do 21. Jul 2016, 20:31, insgesamt 1-mal geändert.
-
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Re: Berechtigungen einer Datei auslesen
Sehr gut, vielen Dank! Dann haben wir schon mal die Möglichkeit es auszulesen.
Ist nur die Frage wie man das dann umrechnen kann. Mit den Zahlensystemen? Von welchem in welches System müsste man das denn umrechnen? Das soll ja irgendwie oktal (8) sein oder?
Ist nur die Frage wie man das dann umrechnen kann. Mit den Zahlensystemen? Von welchem in welches System müsste man das denn umrechnen? Das soll ja irgendwie oktal (8) sein oder?
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Berechtigungen einer Datei auslesen
Intern verarbeiteten die Computer alle Zahlensystem binär.Ist nur die Frage wie man das dann umrechnen kann. Mit den Zahlensystemen?
Auch Fpstate wird die die Zahl als normaler Integer zurück liefern.Von welchem in welches System müsste man das denn umrechnen?
Das Oktalystem ist nur das, da Humanoide die Ausgabe besser lesen können.
Die Funktion BaseToBase wird so gehen:
Code: Alles auswählen
Writeln(BasteToBase(10, 8, IntToStr(Fpstat)));
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Berechtigungen einer Datei auslesen
So kann man das in eine Zeichenkette bringen:
Wenn die zusätzlichen Flags nicht gebraucht werden, einfach den Case-Abschnitt raus nehmen.
Hoffe, so passt alles. Ist noch früh und ich bin noch nicht ganz wach
Code: Alles auswählen
function FileModeToStr(AValue:Cardinal):String;
var Value,Index:Cardinal;
begin
Result:='';
Value:=AValue;
for Index:=0 to 2 do begin
Result:=chr((Value and $7)+$30)+Result;
Value:=Value shr 3;
end;
case AValue and S_IFMT of
S_IFIFO : Result:=Result+' Pipe';
S_IFCHR : Result:=Result+' Character';
S_IFDIR : Result:=Result+' Folder';
S_IFBLK : Result:=Result+' Block';
S_IFREG : Result:=Result+' Regular';
S_IFLNK : Result:=Result+' Link';
S_IFSOCK : Result:=Result+' Socket';
end;
end;
Hoffe, so passt alles. Ist noch früh und ich bin noch nicht ganz wach

-
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Re: Berechtigungen einer Datei auslesen
Passt perfekt! Vielen Dank.
Ich habs mal so angepasst, dass man direkt den Dateinamen übergeben kann:
Ich habs mal so angepasst, dass man direkt den Dateinamen übergeben kann:
Code: Alles auswählen
function FileModeToStrEx(AFileName: string): String;
var
AStMode, v: Cardinal;
AIndex: integer;
AInfo : stat;
begin
Result := '';
if fpstat (PCHar(AFileName), AInfo) <> 0 then exit;
AStMode := AInfo.st_mode;
v := AStMode;
for AIndex:=0 to 2 do begin
Result:=chr((v and $7)+$30)+Result;
v:=v shr 3;
end;
case AStMode and S_IFMT of
S_IFIFO : Result:=Result+' Pipe';
S_IFCHR : Result:=Result+' Character';
S_IFDIR : Result:=Result+' Folder';
S_IFBLK : Result:=Result+' Block';
S_IFREG : Result:=Result+' Regular';
S_IFLNK : Result:=Result+' Link';
S_IFSOCK : Result:=Result+' Socket';
end;
end;