Berechtigungen einer Datei auslesen

Berechtigungen einer Datei auslesen

Beitragvon LazProgger » 21. Jul 2016, 15:23 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?
LazProgger
 
Beiträge: 63
Registriert: 11. Mär 2014, 00:33

Beitragvon Achtzig » 21. Jul 2016, 16:23 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.
Achtzig
 
Beiträge: 89
Registriert: 15. Okt 2007, 12:09
OS, Lazarus, FPC: Debian | 
CPU-Target: xxBit
Nach oben

Beitragvon Mathias » 21. Jul 2016, 17:13 Re: Berechtigungen einer Datei auslesen

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon LazProgger » 21. Jul 2016, 17:28 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.
LazProgger
 
Beiträge: 63
Registriert: 11. Mär 2014, 00:33

Beitragvon Achtzig » 21. Jul 2016, 17:42 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
Achtzig
 
Beiträge: 89
Registriert: 15. Okt 2007, 12:09
OS, Lazarus, FPC: Debian | 
CPU-Target: xxBit
Nach oben

Beitragvon Mathias » 21. Jul 2016, 18:59 Re: Berechtigungen einer Datei auslesen

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon creed steiger » 21. Jul 2016, 19:24 Re: Berechtigungen einer Datei auslesen

Zuletzt geändert von creed steiger am 21. Jul 2016, 19:31, insgesamt 1-mal geändert.
creed steiger
 
Beiträge: 943
Registriert: 11. Sep 2006, 21:56

Beitragvon LazProgger » 21. Jul 2016, 19:27 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?
LazProgger
 
Beiträge: 63
Registriert: 11. Mär 2014, 00:33

Beitragvon Mathias » 21. Jul 2016, 21:25 Re: Berechtigungen einer Datei auslesen

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Achtzig » 22. Jul 2016, 05:15 Re: Berechtigungen einer Datei auslesen

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:
Achtzig
 
Beiträge: 89
Registriert: 15. Okt 2007, 12:09
OS, Lazarus, FPC: Debian | 
CPU-Target: xxBit
Nach oben

Beitragvon LazProgger » 22. Jul 2016, 14:58 Re: Berechtigungen einer Datei auslesen

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;
 
 
LazProgger
 
Beiträge: 63
Registriert: 11. Mär 2014, 00:33

• Themenende •

Zurück zu Linux



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried