Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
Delphi 12 Athens
|
Mit Delphi Chmod oder andere cmd's ausführen unter macOS
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)
|
|
Zitat
|