![]() |
Mit Delphi Chmod oder andere cmd's ausführen unter macOS
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; |
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
In dem Codehaufen geht es hauptsächlich darum die Antwort/Ausgabe einer in der Konsole gestarteten Anwendung auszuwerten (
![]()
Delphi-Quellcode:
Da ist dann die Frage, ob Deine Rechte überhaupt ausreichen, chmod auszuführen. Eventuell wartet ja das System auf das Passwort oder so. Wie verhält sich denn Dein Mac, wenn Du den gewünschten Befehl von Hand eingibst?
Output := popen(PAnsiChar(ansistring(CmdLine)), 'r');
Sherlock |
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
Er hängt an dieser Zeile und ich weiss nicht warum. Wenn ich andere Befehle ausführen lasse, klappt es.
Delphi-Quellcode:
Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)], BytesRead);
|
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Wenn die letzte Zeile nicht mit einem #10 aufhört, dann geht sie natürlich verloren.
Außer du vergisst nach der Schleife nicht den Rest im TempString, also dort nochmal ein
Delphi-Quellcode:
.
if TempString <> '' then CmdResult.Add(UTF8ToString(TempString));
|
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
Delphi-Quellcode:
Move(Buffer^, TempString[length(TempString) - (BytesRead - 1)], BytesRead);
Kennt denn niemand einen Funktionierenden Code um z.B. chmod oder auch youtube-dl oder ffmpeg zu starten und die Ausgabe abzufangen? Ich kriege noch graue Haare damit (wenn ich die nicht schon hätte). |
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Und was für eine Fehlermeldung?
Zugriffsverleztzung bei Ardresse $00000** Wenn BytesRead 0 ist und TempString noch leer war ... ja, dann muß es im Move knallen, eigentlich vor Move, weil es schon beim TempString[...] knallt :angle2: |
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
|
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
|
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
Wie auch immer, ich hatte ja die Hoffnung das irgendwer einen Code irgendwo mal gesehen hat der genau das macht, was ich brauche. Scheint aber wohl doch nicht der Fall zu sein. |
AW: Mit Delphi Chmod oder andere cmd's ausführen unter macOS
Zitat:
Hast du es mit überwachten Ausdrücken versucht? Klappt es auch nicht mit Strg-F7? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz