Berechtigungen einer Datei auslesen

Antworten
LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Berechtigungen einer Datei auslesen

Beitrag von LazProgger »

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?

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Berechtigungen einer Datei auslesen

Beitrag von Achtzig »

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.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Berechtigungen einer Datei auslesen

Beitrag von Mathias »

Mit dem Gegenstück kann ich dienen, dieses setzt ein neues Flag.
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

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Berechtigungen einer Datei auslesen

Beitrag von LazProgger »

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.

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Berechtigungen einer Datei auslesen

Beitrag von Achtzig »

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

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Berechtigungen einer Datei auslesen

Beitrag von Mathias »

Diesbezüglich ist mir keine vorgefertigte Funktion bekannt (Oktal->Zeichenkette).

Vielleicht hilft dies weiter: http://www.entwickler-ecke.de/viewtopic ... 70&view=dl
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Berechtigungen einer Datei auslesen

Beitrag von creed steiger »

Zuletzt geändert von creed steiger am Do 21. Jul 2016, 20:31, insgesamt 1-mal geändert.

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Berechtigungen einer Datei auslesen

Beitrag von LazProgger »

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?

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Berechtigungen einer Datei auslesen

Beitrag von Mathias »

Ist nur die Frage wie man das dann umrechnen kann. Mit den Zahlensystemen?

Intern verarbeiteten die Computer alle Zahlensystem binär.

Von welchem in welches System müsste man das denn umrechnen?

Auch Fpstate wird die die Zahl als normaler Integer zurück liefern.
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

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Berechtigungen einer Datei auslesen

Beitrag von Achtzig »

So kann man das in eine Zeichenkette bringen:

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;
 


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 :wink:

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Berechtigungen einer Datei auslesen

Beitrag von LazProgger »

Passt perfekt! Vielen Dank.

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;
 
 

Antworten