Einzelnen Beitrag anzeigen

Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Mit Delphi Chmod oder andere cmd's ausführen unter macOS

  Alt 29. Aug 2022, 17:48
Kennt jemand einen Weg chmod oder andere executable auszuführen und deren Rückgabe auch zu erhalten?

Den Code, den ich soweit gefunden habe, hängt sich aber auf.

Delphi-Quellcode:
const
   libc = '/usr/lib/libc.dylib';

   IFT_ETHER = $6;

type
PIOFile = Pointer;

function getifaddrs(var ifap: pifaddrs): Integer; cdecl; external libc name _PU + 'getifaddrs'; {$EXTERNALSYM getifaddrs}
procedure freeifaddrs(ifp: pifaddrs); cdecl; external libc name _PU + 'freeifaddrs'; {$EXTERNALSYM freeifaddrs}
function popen(const Command: PAnsiChar; Modes: PAnsiChar): PIOFile; cdecl;   external libc name _PU+'popen';
function pclose(Stream: PIOFile): Integer; cdecl; external libc name _PU+'pclose';
function feof(Stream: PIOFile): Integer; cdecl; external libc name _PU+'feof';
function fread(Ptr: Pointer; Size: LongWord; N: LongWord; Stream: PIOFile): LongWord; cdecl; external libc name _PU+'fread';
function wait(__stat_loc: PInteger): Integer; cdecl; external libc name _PU+'wait';


procedure ExecCmdLine(const CmdLine: string; CmdResult: TStrings);
var
   Output: PIOFile;
   Buffer: PAnsiChar;
   TempString: ansistring;
   Line: ansistring;
   BytesRead: Integer;
const
   BufferSize: Integer = 8192;
begin
   TempString := '';
   Output := popen(PAnsiChar(ansistring(CmdLine)), 'r');
   GetMem(Buffer, BufferSize);
   if Assigned(Output) then
      try
         while feof(Output) = 0 do
         begin
            BytesRead := fread(Buffer, 1, BufferSize, Output);
            SetLength(TempString, length(TempString) + BytesRead);
            Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)],   BytesRead);
            while Pos(#10, TempString) > 0 do
            begin
               Line := Copy(TempString, 1, Pos(#10, TempString) - 1);
               if CmdResult <> nil then CmdResult.Add(UTF8ToString(Line));
               TempString := Copy(TempString, Pos(#10, TempString) + 1,length(TempString));
            end;
         end;
      finally
         pclose(Output);
         wait(nil);
         FreeMem(Buffer, BufferSize);
      end;
end;

Geändert von softtouch (29. Aug 2022 um 20:19 Uhr)
  Mit Zitat antworten Zitat