05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.5 Prozeßkontrolle 93<br />

16–18<br />

20–23<br />

25–27<br />

Als erstes wird <strong>mit</strong> execl() das Programm /bin/ps gestartet. Dem Programm<br />

werden beim Start die Kommandozeilenargumente ps (für den Programmnamen)<br />

<strong>und</strong> -ja übergeben. Der abschließende Null-Zeiger beendet<br />

die Liste der Argumente. Ist der Aufruf von execl() erfolgreich, so kehrt<br />

die Funktion nicht mehr zurück. Das aktuelle Programmabbild wird stattdessen<br />

durch das aufgerufene Programm /bin/ps überlagert. Sollte bei Start ein<br />

Fehler aufgetreten sein, schließt sich eine Fehlerbehandlung an.<br />

Der Aufruf der Funktion execle() wird unter normalen Umständen nicht<br />

mehr erreicht. execle() erlaubt es, die Umgebungsvariablen des zu startenden<br />

Prozeß’ über den Vektor envp vorzugeben. Das aufgerufene Programm<br />

/bin/ps findet in unserem Beispiel in seiner Umgebung die Variablen DISPLAY<br />

<strong>und</strong> TERM gesetzt.<br />

Der letzte Aufruf zeigt den Einsatz der execvp()-Funktion. Das zu startende<br />

Programm ist hier ohne seinen Pfad angegeben. Enthält der Parameter<br />

file keinen Schrägstrich ( /“), so versucht execvp(), das Programm über<br />

”<br />

den aktuellen Suchpfad ausfindig zu machen. 22 Ist dagegen ein Schrägstrich<br />

vorhanden, geht execvp() davon aus, daß es sich um einen Programmnamen<br />

<strong>mit</strong> Pfad handelt <strong>und</strong> verhält sich wie execv(). Die Funktion erwartet die<br />

an das Programm zu übergebenden Kommandozeilenargumente als Vektor.<br />

Der Vektor wurde zuvor in Zeile 12 des Beispielprogramms initialisiert. Auch<br />

hier enthält der erste Eintrag den Namen des gestarteten Programms <strong>und</strong> ein<br />

Null-Zeiger terminiert den Vektor.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

Beispiel 2.21. exec-test.c<br />

7<br />

8 int main( int argc, char *argv[] )<br />

9 {<br />

10 int ret;<br />

11 char *env_vector[] = { "DISPLAY=:0", "TERM=xterm", NULL };<br />

12 char *arg_vector[] = { "ps", "auxww", NULL };<br />

13<br />

14 printf( "Meine Prozeß -ID (PID) = %d.\n\n", getpid() );<br />

15<br />

16 ret = execl( "/bin/ps", "ps", "-ja", NULL );<br />

17 if( ret == -1 )<br />

18 printf( "execl(): %s.\n", strerror( errno ) );<br />

19<br />

22 Der Suchpfad wird unter <strong>Unix</strong> durch die Umgebungsvariable PATH bestimmt.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!