•  Back 
  •  Prozessfunktionen 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File5.11.3  Pexec                                                      TOS

 Name:         »program execution« - Programm laden und ausführen.

 Gemdosnummer: 75

 Deklaration:  int32_t Pexec ( uint16_t mode, ... );

 Beschreibung: Die Funktion lädt und startet ein Programm. Über den 
               Parameter mode lassen sich verschiedene Varianten 
               auswählen:

                mode  Bedeutung

                0     int32_t Pexec (0, int8_t *name, int8_t *cmdline, 
                      int8_t *env);

                      Load and go: Lädt und startet das in name 
                      angegebene Programm, und übergibt die 
                      Kommandozeile cmdline. Für den Parameter env 
                      gilt:

                       -1    = kein Environment anlegen.
                       NULL  = Environment des Parent vererben.

                      Jeder andere Wert ist ein Zeiger auf das zu 
                      vererbene Environment.

                3     PD *Pexec (3, int8_t* name, int8_t *cmdline, 
                      int8_t *env);


                      Load, don't go: wird meist zum Starten von 
                      Overlays oder zum Laden von Programmen in einem 
                      Debugger benutzt. Entspricht mode 0, mit dem 
                      Unterschied, daß das Programm nicht sofort 
                      gestartet wird, sondern ein Zeiger auf die 
                      Basepage als LONG zurückgeliefert wird. Der 
                      Parent ist der Eigentümer des Speichers, den die 
                      Basepage und das Environment des Childs belegen 
                      und muß ihn freigeben, wenn das Child sich 
                      beendet hat.

                4     int32_t Pexec (4, 0L, PD *basepage, 0L);


                      Just go: startet ein bereits geladenes Programm. 
                      Die Basepage sollte mit mode 3 oder 5 erzeugt 
                      worden sein.

                5     PD *Pexec (5, 0L, int8_t *cmdline, int8_t *env);


                      Create Basepage: Zunächst legt GEMDOS ein neues 
                      Environment an. Dann wird der größte 
                      zusammenhängende Speicherblock alloziert und in 
                      den ersten 256 Byte eine Basepage angelegt. Für 
                      den Parameter env gilt:

                       -1    = kein Environment anlegen.
                       NULL  = Environment des Parent vererben.

                      Jeder andere Wert ist ein Zeiger auf das zu 
                      vererbende Environment.

                      Unter MiNT kann dieser Mode zusammen mit mode 3 
                      dazu benutzt werden, einen Aufruf von Pvfork 
                      ohne Blockieren des parent zu emulieren.

                6     int32_t Pexec (6, 0L, PD *basepage, 0L);


                      Just go, then free: Entspricht mode 4, mit dem 
                      Unterschied, daß allozierter Speicher dem 
                      gestarteten Prozess und nicht dem Starter 
                      gehört, so daß der Speicher, den die Basepage 
                      belegt, automatisch freigegeben wird, wenn das 
                      Child mit Pterm terminiert. Zusammen mit Modus 3 
                      kann damit der gleiche Effekt erzielt werden, 
                      wie durch Modus 0. Dieser Modus steht erst ab 
                      GEMDOS-Version 0.15 zur Verfügung.

                7     PD *Pexec (7, uint32_t prgflags, int8_t 
                      *cmdline, int8_t *env);

                      Create Basepage, respecting prgflags: Analog 
                      mode 5, nur kann in prgflags die gleiche 
                      Information wie im Feld ph_prgflags des 
                      Programm-Headers übergeben werden. Dieser Modus 
                      wird vom BIOS des TT benutzt, um GEM zu starten, 
                      und steht erst ab GEMDOS Version 0.19 zur 
                      Verfügung.

                100   int32_t Pexec (100, int8_t *name, int8_t 
                      *cmdline, int8_t *env);

                      Load, go, don't wait: Analog mode 0, nur wartet 
                      der Aufrufer nicht, bis das gestartete Programm 
                      beendet wird, d.h. die Funktion kehrt sofort zum 
                      Parent Prozess zurück, während das Child 
                      startet. Der Rückgabewert ist ein negativer 
                      Fehlercode oder die positive PID des Childs.

                101   da dieser Modus nur MagiC-intern zum Vererben 
                      von Pfad- und Dateihandles benutzt wird, wird 
                      auf die Angabe der genauen Syntax an dieser 
                      Stelle verzichtet.

                102   wird MagiC-intern verwendet, um einen bestimmten 
                      Prozess zu entfernen. Auf die genaue Syntax wird 
                      daher an dieser Stelle verzichtet.

                104   int32_t Pexec (104, int8_t *name, PD *basepage, 
                      0L);


                      Just go, don't wait: Analog mode 4, nur wartet 
                      der Aufrufer nicht, bis das gestartete Programm 
                      beendet wird. Es wird ein Prozess gestartet, 
                      dessen Basepage vorher durch einen Modus von 3, 
                      5 oder 7 gesetzt wurde. Zu beachten ist, daß das 
                      Environment und die Basepage des Childs sich 
                      auch im Besitz des Parents befinden (tatsächlich 
                      erbt der Child allen Speicher, der sich im 
                      Besitz des Parents befindet). Der Parameter name 
                      ist ein Zeiger auf einen String, der den Namen 
                      des neuen Prozesses beschreibt; bei einem NULL- 
                      Wert wird der Name des Parent-Prozesses benutzt. 
                      Die Funktion liefert einen negativen Fehlercode, 
                      oder die positive PID des Childs zurück.

                106   int32_t Pexec (106, int8_t *name, PD *basepage, 
                      0L);


                      Just go, don't wait, no sharing: Analog mode 
                      104, allerdings befinden sich Environment und 
                      Basepage des Childs nicht im Besitz des Parents, 
                      und der Child hat keinen Zugriff auf Speicher, 
                      welcher dem Parent-Prozess zugeteilt wurde. Beim 
                      Beenden des Childs wird dessen Speicherplatz 
                      wieder freigegeben. In Verbindung mit Modus 3 
                      entspricht Pexec (106, ...) daher dem Modus 100 
                      (während Modus 3 gefolgt von Modus 6 einem 
                      Aufruf von Pexec (0, ...) entspricht).
                      Wird ab MagiC 2.0 nicht mehr unterstützt.

                107   entspricht im wesentlichen mode 7, und wird 
                      intern von MagiC verwendet. Auf die genaue 
                      Syntax wird daher an dieser Stelle verzichtet.

                108   wird von MagiC intern zum Starten eines 
                      Accessories verwendet. Da die genaue Syntax 
                      offiziell nicht dokumentiert ist, sollten eigene 
                      Programme besser auf shel_write zurückgreifen.

                200   int32_t Pexec (200, int8_t *name, int8_t 
                      *cmdline, int8_t *env);

                      Replace program and go: Analog mode 100, jedoch 
                      überschreibt der neue Prozess den alten 
                      vollständig. Der alte Prozess behält zwar seine 
                      PID und die meisten seiner Attribute, aber sein 
                      gesamter Speicherplatz wird freigegeben. Während 
                      Pexec (0, ...) als Unterprogrammaufruf 
                      (call...return) angesehen werden kann, wirkt 
                      dieser Modus eher wie ein 'goto'.

               Hinweis: Nicht alle Modi sind unter allen 
               Betriebssystemvarianten verfügbar; deshalb sollte der 
               Rückgabewert der Funktion beachtet werden. Unbekannte 
               Modi sorgen für ein Funktionsergebnis von EINVFN.

               Kommandozeilen werden als String im Pascal-Format 
               übergeben, d.h. im ersten Byte befindet sich die Länge 
               der Zeile (maximal 124 Zeichen).

 Ergebnis:     Die Funktion liefert als Ergebnis den Abschlußcode des 
               Child-Prozesses. Wenn ein Overlay geladen wurde, 
               enthält das Ergebnis die Basepage des Overlays. Bei 
               einem negativen Resultat ist ein Fehler aufgetreten.

 Verfügbar:    Alle GEMDOS Versionen.

 Gruppe:       Prozessfunktionen

 Querverweis:  Binding   shel_write   Programmflags   ARGV-Verfahren