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
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#1

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 07:23 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 by Thomas Breitkreuz