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