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.35 Psignal TOS Name: »Psignal« - Art der Signalbehandlung verändern. Gemdosnummer: 274 Deklaration: int32_t Psignal ( int16_t sig, int32_t handler ); Beschreibung: Die Funktion ändert die Art und Weise, wie auf das Signal sig reagiert werden soll. Der Parameter handler kann 3 verschiedene Werte annehmen: handler Bedeutung 0 Das Signal wird mit der Default-Aktion beantwortet. 1 Das Signal wird ignoriert. Liegt es gerade an, so wird es gelöscht. Jeder andere Wert wird als die Adresse einer Benutzerfunktion interpretiert, die beim Auftreten des Signals sig aufgerufen wird. Dieser Funktion wird (über den Stack) ein Long-Wert übergeben, welcher der Signalnummer entspricht. Auf diese Art 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 Psignal 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. Ergebnis: Die Funktion liefert den alten Wert des Signal-Handlers zurück. Dies ist entweder 0, 1 oder die Adresse des Handlers. Im Fehlerfall werden folgende Werte zurückgeliefert: EACCDN: das Signal kann nicht abgefangen werden. ERANGE: sig ist kein gültiges Signal. Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04 und in MagiC ab der Version 4.50. Gruppe: Prozessfunktionen Querverweis: Binding Pkill Psigaction Psigblock Psigreturn Signale