AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kylix - Linux - Befehl ausführen

Ein Thema von Pump3r · begonnen am 21. Apr 2006 · letzter Beitrag vom 21. Apr 2006
Antwort Antwort
Pump3r

Registriert seit: 6. Okt 2005
175 Beiträge
 
Delphi 7 Enterprise
 
#1

Kylix - Linux - Befehl ausführen

  Alt 21. Apr 2006, 11:25
Hi, ich hab jetzt Kylix 3 installiert, nun wollte ich mal was ganz einfaches schreiben.
Ich würd gerne ne mysql sicherung machen diese dann packen und wegschieben . . .
Nur häng ich da an nem kleinen Problem.
Wie sag ich Linux das es einen Befehl ausführt?
Ich mein unter Windows würd ich das jetzt angehen:
uses: ShellAPI

und dann halt: ShellExecute(Application.Handle,'open',PChar( . . . .

wie mach ich sowas unter linux?
zb einen ganz einfachen befehl wie die console öffnen?


gruß Pump
Christian Hermann
  Mit Zitat antworten Zitat
Pump3r

Registriert seit: 6. Okt 2005
175 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Kylix - Linux - Befehl ausführen

  Alt 21. Apr 2006, 12:19
ah hab was gefunden . . libc
Christian Hermann
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#3

Re: Kylix - Linux - Befehl ausführen

  Alt 21. Apr 2006, 12:21
Da gibt es prinzipiell mehrere Möglichkeiten.
Die grundlegenste ist ein eigner fork() in deinem Programm und anschließendes Aufrufen von execve() (oder eines der execve()-Frontends) und im Hauptprozess auf das Beendes des Childprozesses warten. Das wäre die POSIX-konforme Lösung, aber denkbar kompliziert im Vergleich zu ShellExecute(), dafür aber sicher.
Wenn du willst, daß dein Programm weiterläuft, während das andere Programm läuft, könntest du popen() benutzen und am Ende deines Programmes lediglich um aufzuräumen ein pclose() auf das zurückgegebene FILE machen. Dadurch kann dein Programm weiterarbeiten, während das andere Programm ebenfalls läuft. Sobald du aber pclose() aufrufst, wird auf das Ende des Kindprozesses gewartet, und deswegen wartest du erst am Ende darauf.
Die kürzeste Version ist system(). Die öffnet den Prozess und wartet auf dessen Beeindung, während das andere Programm läuft kann dein Programm also nichts machen.

Alle Funktionen sollten irgendwie auch unter Kylix zugänglich sein, aber frag mich nicht, in welchen Units (system() und popen()/pclose() sollten in libc.pas sein).
Die erste Variante ist natürlich am flexibelsten, weil sie einen echten Fork bildet und exec() das Image entsprechend ersetzt. Die letzten beiden Varianten erzeugen *beide* zunächst eine Shell (es wird /bin/sh verwendet), die das übergebene Kommando ausführen. Dadurch kann das Kommando zwar auch ein Shell-Internal sein, aber wenn du ungeprüft Benutzereingabe auf diese Art und Weise ausführst, reißt du Sicherheitslöcher auf. Zum Beispiel ersetzt die Shell den Asterisk (*) oder verlangt nach String-Escaping und Schutz von Leerzeichen. Wenn du also vom Benutzer ein Kommando eingeben lässt, ist es deine Aufgabe, dieses auf alle Eventualitäten zu überprüfen und entsprechend abzusichern. Die erste Variante ist zwar aufwändiger, dafür aber mit weniger Overhead verbunden und prinzipiell mit weniger Sichtheitslücken behaftet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz