Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigfpe(3) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sigvec(3)

signal(3-ucb)

abort(3C)

floatingpoint(3M)

signal(5)

sigfpe(3)               (BSD Compatibility Package)               sigfpe(3)

NAME
     sigfpe - Signalbearbeitung für bestimmte SIGFPE-Codes

SYNTAX
     /usr/ucb/cc [flag ...] file ... -lucb

     #include <signal.h>
     #include <floatingpoint.h>

     sigfpehandlertype sigfpe(code, hdl)
     sigfpecodetype code;
     sigfpehandlertype hdl;

BESCHREIBUNG
     Mit dieser Funktion kann die Bearbeitung von Signalen für bestimmte
     SIGFPE-Codes angegeben werden. Ein Aufruf von sigfpe definiert eine
     neue Bearbeitungsroutine hdl für einen bestimmten SIGFPE-Code code und
     gibt die alte Bearbeitungsroutine als den Wert der Funktion sigfpe
     zurück. Normalerweise werden Bearbeitungsroutinen als Zeiger auf Funk-
     tionen angegeben. Die Sonderfälle SIGFPEIGNORE, SIGFPEABORT und
     SIGFPEDEFAULT erlauben ein Ignorieren des Signals, die Angabe eines
     Speicherabzugs durch abort bzw. die Standardbearbeitung.

     Für die folgenden IEEE-Codes wird standardmäßig die für
     ieeehandler(3M) angegebene Bearbeitungsroutine aufgerufen:

FPEFLTINEXTRAP    fpinexact     Gleitkommafehler: ungenaues Ergebnis
FPEFLTDIVTRAP     fpdivision    Gleitkommafehler: Division durch Null
FPEFLTUNDTRAP     fpunderflow   Gleitkommafehler: Unterlauf
FPEFLTOVFTRAP     fpoverflow    Gleitkommafehler: Überlauf
FPEFLTBSUNTRAP    fpinvalid     Verzweigen oder auf "unsortiert" (unordered)
                                   setzen
FPEFLTOPERRTRAP   fpinvalid     Gleitkommafehler: Operand
FPEFLTNANTRAP     fpinvalid     Gleitkommafehler: NaN (Not-A-Number)

     Für alle anderen SIGFPE-Codes wird standardmäßig ein Speicherabzug
     durch abort(3C) erstellt.

     Mit der Kompilierungsoption -ffpa erfolgt eine FPA-Neuberechnung, um
     die standardmäßige Abbruchaktion für den Code FPEFPAERROR zu ersetz-
     ten. Hinweis: SIGFPEDEFAULT beendet den Prozeß und stellt die FPA-
     Neuberechnung für diesen Code nicht wieder her.













Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

sigfpe(3)               (BSD Compatibility Package)               sigfpe(3)

     Drei Schritte sind erforderlich, um einen IEEE-SIGFPE-Code mit sigfpe
     abzufangen:

     1) Eine Bearbeitungsroutine mit sigfpe einrichten.

     2) Die entsprechende IEEE-Unterbrechungsfunktion in der Hardware akti-
        vieren, möglicherweise mit Hilfe von Anweisungen einer Assembler-
        Sprache.

     3) Eine Gleitkommaoperation durchführen, die die gewünschte IEEE-
        Ausnahmebedingung generiert.

     Im Gegensatz zu ieeehandler(3M) ändert sigfpe niemals die Bits für
     den Gleitkomma-Hardwaremodus, die die IEEE-Unterbrechung betreffen. Es
     werden keine IEEE-SIGFPE-Signale generiert, wenn diese Hardwaremodus-
     Bits nicht aktiviert sind.

     SIGFPE-Signale können mit Hilfe von sigvec(3), signal(3-ucb),
     sigfpe(3) oder ieeehandler(3M) bearbeitet werden. Verwenden Sie in
     einem Programm nur jeweils eine dieser Schnittstellen zur Bearbeitung
     von SIGFPE-Signalen, um Komplikationen zu vermeiden.

BEISPIELE
     Eine vom Benutzer angegebener Routine zur Signalbearbeitung kann fol-
     gendermaßen aussehen:

     void samplehandler( sig, code, scp, addr )
          int sig ;               /* sig == SIGFPE always */
          int code ;
          struct sigcontext *scp ;
          char *addr ;
          {
            /*
               Sample user-written sigfpe code handler.
               Prints a message and continues.
               struct sigcontext is defined in <signal.h>.
            */
            printf(" ieee exception code %x occurred at pc %X \n",
                   code,scp->scpc);
          }














Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

sigfpe(3)               (BSD Compatibility Package)               sigfpe(3)

     Sie könnte folgendermaßen eingerichtet werden:

          extern void samplehandler;
          main
          {
            sigfpehandlertype hdl, oldhandler1, oldhandler2;
          /*
           * save current overflow and invalid handlers; set the new
           * overflow handler to samplehandler and set the new
           * invalid handler to SIGFPEABORT (abort on invalid)
           */
            hdl = (sigfpehandlertype) samplehandler;
            oldhandler1 = sigfpe(FPEFLTOVFTRAP, hdl);
            oldhandler2 = sigfpe(FPEFLTOPERRTRAP, SIGFPEABORT);
            ...
          /*
           * restore old overflow and invalid handlers
           */
            sigfpe(FPEFLTOVFTRAP,   oldhandler1);
            sigfpe(FPEFLTOPERRTRAP, oldhandler2);
          }

RÜCKGABEWERT
     sigfpe gibt BADSIG zurück, wenn code weder Null noch ein definierter
     SIGFPE-Code ist.

DATEIEN
     /usr/include/floatingpoint.h

     /usr/include/signal.h

SIEHE AUCH
     sigvec(3), signal(3-ucb), abort(3C), floatingpoint(3M),
     ieeehandler(3M), signal(5).




















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026