•  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.32  Psigaction                                                TOS

 Name:         »Psigaction« - Art der Signalbehandlung verändern.

 Gemdosnummer: 311

 Deklaration:  int32_t Psigaction ( int16_t sig, struct sigaction 
               *act, struct sigaction *oact );

 Beschreibung: Die Funktion ändert die Art und Weise, wie auf das 
               Signal sig reagiert werden soll. Der Parameter act ist 
               dabei entweder NULL, oder zeigt auf eine sigaction- 
               Struktur, die das Verhalten des Signal-Handlings 
               beschreibt. Für die Komponente sa_handler gilt dabei:

                sa_handler  Bedeutung

                0           beim Eintreffen des Signals wird die 
                            Default-Aktion für das Signal ausgeführt.
                1           das Signal sig wird ignoriert. Liegt es 
                            gerade an, so wird es gelöscht.

               Jeder andere Wert von sa_handler wird als die Adresse 
               einer Funktion interpretiert, die beim Auftreten des 
               Signals aufgerufen wird. Über den Stack wird dieser 
               Funktion ein Long-Wert übergeben, der der jeweiligen 
               Signalnummer entspricht. Auf diese Art und Weise ist es 
               möglich, den Signal-Handler für mehrere Signale zu 
               benutzen.

               Solange ein Signal bearbeitet wird, kann es nicht 
               erneut gesendet werden. Zu beachten ist ferner, daß (im 
               Gegensatz zu einigen Unix-Versionen) das Signal- 
               Handling vor der Ausführung des Handlers nicht auf den 
               Default-Handler zurückgesetzt wird.

               Der Signalhandler muß entweder mit RTS (Return to 
               Sender) beendet werden, oder Psigreturn aufrufen, um 
               anzuzeigen, daß die Signalbehandlung abgeschlossen ist. 
               Anschließend wird die Blockierung des Signals 
               aufgehoben. Psigreturn führt zusätzlich einige interne 
               Säuberungen des Kernels durch, die notwendig sind, 
               falls der Signal-Handler nicht beendet wird (longjump).

               Signalhandler können beliebige BIOS, XBIOS und GEMDOS 
               Aufrufe machen. AES- oder VDI-Aufrufe sind hingegen 
               nicht gestattet. Dies gilt jedoch nicht in MagiC; hier 
               gibt es einige Unterschiede zu beachten.

               Ein Aufruf von Psigaction hat den Nebeneffekt, daß das 
               Signal demaskiert (d.h. freigegeben) wird. So kann ein 
               Prozess beim Abarbeiten eines Signals dieses 
               zurücksetzen und es sich erneut zusenden, um sich 
               beispielsweise selbst zu suspendieren, während ein 
               Signal für Job-Control bearbeitet wird. Die 
               Signalbearbeitung ist gegenüber Pfork/Pvfork 
               abgesichert.

               Signale, die von einem Prozess ignoriert werden, werden 
               auch vom Child nach einem Pexec-Aufruf ignoriert. 
               Außerdem werden Signale, die von einem Signal-Handler 
               abgefangen werden, im Child-Prozess auf den Defaultwert 
               zurückgesetzt.

               Die Komponente sa_flags der sigaction-Struktur 
               definiert ein zusätzliches, Signal-spezifisches 
               Verhalten. Wenn sig das Signal SIGCHLD ist, und in 
               sa_flags das SA_NOCLDSTOP Bit gesetzt ist, wird SIGCHLD 
               dem Prozess nur dann gesendet, wenn einer seiner Childs 
               terminiert (und eben nicht dann, wenn ein Child durch 
               ein Job-Control-Signal suspendiert wird).

 Ergebnis:     Die Funktion kann folgende Rückgabewerte liefern:

                E_OK  :  kein Fehler aufgetreten.
                EACCDN:  Signal kann vom Benutzer nicht abgefangen 
                         werden.
                ERANGE:  sig ist kein gültiges Signal.

 Verfügbar:    Verfügbar, wenn ein 'MiNT' Cookie mit einer 
               Versionsnummer von mindestens 0.95 existiert und in 
               MagiC ab Version 4.50.

 Gruppe:       Prozessfunktionen

 Querverweis:  Binding   Pkill   Psigblock   Psignal   Psigreturn 
               Signale