Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigvec(3) — Amiga System V Release 4 Version 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

signal(3)

sigpause(3)

sigsetmask(3)

wait(3)

exec(2)

fcntl(2)

fork(2)

getrlimit(2)

getitimer(2)

ioctl(2)

kill(2)

ptrace(2)

read(2)

sigblock(2)

signal(2)

stack(2)

umask(2)

wait(2)

write(2)

setjmp(3)

streamio(7)

termio(7)



sigvec(3)              C LIBRARY FUNCTIONS              sigvec(3)



NAME
     sigvec - software signal facilities

SYNOPSIS
     cc [ flag... ] file ... -lucb
     #include <signal.h>
     int sigvec(sig, vec, ovec)
     int sig;
     struct sigvec *vec, *ovec;

DESCRIPTION
     The system defines a set of signals that may be delivered to
     a  process.   Signal  delivery resembles the occurrence of a
     hardware interrupt:  the  signal  is  blocked  from  further
     occurrence,  the current process context is saved, and a new
     one is built.  A process may specify a handler  to  which  a
     signal  is  delivered,  or  specify  that  a signal is to be
     blocked or ignored.  A  process  may  also  specify  that  a
     default  action  is  to be taken by the system when a signal
     occurs.  Normally, signal handlers execute  on  the  current
     stack of the process.  This may be changed, on a per-handler
     basis, so that signals are taken on a special signal  stack.
     All signals have the same priority.  Signal routines execute
     with the signal that caused their invocation to be  blocked,
     but  other  signals  may  yet  occur.   A global signal mask
     defines the set of signals currently blocked  from  delivery
     to  a process.  The signal mask for a process is initialized
     from that of its parent (normally 0).   It  may  be  changed
     with  a  sigblock(3) or sigsetmask(3) call, or when a signal
     is delivered to the process.  A process may also  specify  a
     set  of  flags for a signal that affect the delivery of that
     signal.  When a signal condition arises for a  process,  the
     signal is added to a set of signals pending for the process.
     If the signal is not currently blocked by the  process  then
     it is delivered to the process.  When a signal is delivered,
     the current state of the process is saved, a new signal mask
     is  calculated  (as described below), and the signal handler
     is invoked.  The call to the handler is arranged so that  if
     the  signal  handling  routine  returns normally the process
     will  resume  execution  in  the  context  from  before  the
     signal's  delivery.   If  the  process wishes to resume in a
     different context, then it must arrange to restore the  pre-
     vious  context itself.  When a signal is delivered to a pro-
     cess a new signal mask is installed for the duration of  the
     process'  signal  handler (or until a sigblock or sigsetmask
     call is made).  This mask is formed by  taking  the  current
     signal mask, adding the signal to be delivered, and ORing in
     the signal mask associated with the handler to  be  invoked.
     The  action  to  be  taken  when  the signal is delivered is
     specified by a sigvec structure, which includes the  follow-
     ing members:
     void    (*svhandler)();      /* signal handler */



             Last change: BSD Compatibility Package             1





sigvec(3)              C LIBRARY FUNCTIONS              sigvec(3)



     int     svmask;              /* signal mask to apply */
     int     svflags;             /* see signal options */
     #define SVONSTACK    /* take signal on signal stack */
     #define SVINTERRUPT  /* do not restart system on signal return */
     #define SVRESETHAND  /* reset handler to SIGDFL when signal taken */
     If the SVONSTACK bit is set in the flags for  that  signal,
     the  system  will  deliver  the signal to the process on the
     signal  stack  specified  with  sigstack(2),   rather   than
     delivering the signal on the current stack.  If vec is not a
     NULL  pointer,  sigvec  assigns  the  handler  specified  by
     svhandler,  the  mask  specified  by svmask, and the flags
     specified by svflags to the specified signal.  If vec is  a
     NULL  pointer,  sigvec does not change the handler, mask, or
     flags for the specified signal.  The mask specified  in  vec
     is  not  allowed to block SIGKILL, SIGSTOP, or SIGCONT.  The
     system enforces this restriction silently.  If ovec is not a
     NULL pointer, the handler, mask, and flags in effect for the
     signal before the call to sigvec are returned to  the  user.
     A call to sigvec with vec a NULL pointer and ovec not a NULL
     pointer can be used to determine  the  handling  information
     currently  in  effect  for  a  signal  without changing that
     information.  The following is a list of  all  signals  with
     names as in the include file /usr/include/signal.h:
          SIGHUP         hangup
          SIGINT         interrupt
          SIGQUIT   *    quit
          SIGILL    *    illegal instruction
          SIGTRAP   *    trace trap
          SIGABRT   *    abort (generated by abort(3) routine)
          SIGEMT    *    emulator trap
          SIGFPE    *    arithmetic exception
          SIGKILL        kill (cannot be caught, blocked, or ignored)
          SIGBUS    *    bus error
          SIGSEGV   *    segmentation violation
          SIGSYS    *    bad argument to system call
          SIGPIPE        write on a pipe or other socket with no one to read it
          SIGALRM        alarm clock
          SIGTERM        software termination signal
          SIGURG    @    urgent condition present on socket
          SIGSTOP   †    stop (cannot be caught, blocked, or ignored)
          SIGTSTP   †    stop signal generated from keyboard
          SIGCONT   @    continue after stop (cannot be blocked)
          SIGCHLD   @    child status has changed
          SIGTTIN   †    background read attempted from control terminal
          SIGTTOU   †    background write attempted to control terminal
          SIGIO     @    I/O is possible on a descriptor [see fcntl(2)]
          SIGXCPU        cpu time limit exceeded [see setrlimit(2)]
          SIGXFSZ        file size limit exceeded [see setrlimit(2)]
          SIGVTALRM      virtual time alarm [see setitimer(2)]
          SIGPROF        profiling timer alarm [see setitimer(2)]
          SIGWINCH  @    window changed [see termio(4)]
          SIGUSR1        user-defined signal 1



             Last change: BSD Compatibility Package             2





sigvec(3)              C LIBRARY FUNCTIONS              sigvec(3)



          SIGUSR2        user-defined signal 2
     The starred signals in the list above cause a core image  if
     not  caught or ignored.  Once a signal handler is installed,
     it remains installed until another sigvec call is  made,  or
     an  execve(2)  is  performed, unless the SVRESETHAND bit is
     set in the flags for that signal.  In that case,  the  value
     of  the handler for the caught signal will be set to SIGDFL
     before entering the  signal-catching  function,  unless  the
     signal  is SIGILL, SIGPWR, or SIGTRAP.  Also, if this bit is
     set, the bit for that signal in the signal mask will not  be
     set;  unless  the  signal  mask  associated with that signal
     blocks that signal, further occurrences of that signal  will
     not  be  blocked.  The SVRESETHAND flag is not available in
     4.2BSD, hence it should not be used if backward  compatibil-
     ity is needed.  The default action for a signal may be rein-
     stated by setting the  signal's  handler  to  SIGDFL;  this
     default  is  termination except for signals marked with @ or
     †.  Signals marked with @ are discarded  if  the  action  is
     SIGDFL;  signals  marked  with † cause the process to stop.
     If the process is terminated, a ``core image'' will be  made
     in the current working directory of the receiving process if
     the signal is one for which an asterisk appears in the above
     list  [see  core(4)].   If  the  handler  for that signal is
     SIGIGN, the signal is  subsequently  ignored,  and  pending
     instances  of  the signal are discarded.  If a caught signal
     occurs during certain system calls,  the  call  is  normally
     restarted.   The call can be forced to terminate prematurely
     with an EINTR error return by setting the  SVINTERRUPT  bit
     in  the flags for that signal.  The SVINTERRUPT flag is not
     available in 4.2BSD, hence it should not be used if backward
     compatibility  is  needed.   The  affected  system calls are
     read(2) or write(2) on a slow device (such as a terminal  or
     pipe  or other socket, but not a file) and during a wait(2).
     After a fork(2) or vfork(2) the child inherits all  signals,
     the signal mask, the signal stack, and the restart/interrupt
     and reset-signal-handler flags.  The execve(2)  call  resets
     all  caught signals to default action and resets all signals
     to be caught on the  user  stack.   Ignored  signals  remain
     ignored;  the  signal  mask  remains  the same; signals that
     interrupt system calls continue to do so.  The  accuracy  of
     addr  is  machine  dependent.  For example, certain machines
     may supply an address that  is  on  the  same  page  as  the
     address  that caused the fault.  If an appropriate addr can-
     not be computed it will be set to SIGNOADDR.

RETURN VALUE
     A 0 value indicates that the call succeeded.   A  -1  return
     value  indicates  that an error occurred and errno is set to
     indicate the reason.

ERRORS
     sigvec will fail and no new signal handler will be installed



             Last change: BSD Compatibility Package             3





sigvec(3)              C LIBRARY FUNCTIONS              sigvec(3)



     if one of the following occurs:

     EFAULT         Either vec or ovec is not a NULL pointer  and
                    points  to memory that is not a valid part of
                    the process address space.

     EINVAL         Sig is not a valid signal  number,  or,  SIG-
                    KILL, or SIGSTOP.

SEE ALSO
     signal(3), sigpause(3),  sigsetmask(3),  wait(3).   exec(2),
     fcntl(2),  fork(2),  getrlimit(2),  getitimer(2),  ioctl(2),
     kill(2), ptrace(2), read(2),  sigblock(2),  signal(2),  sig-
     stack(2),  umask(2),  wait(2),  write(2),  setjmp(3)  in the
     Programmer's Reference Manual.
     streamio(7), termio(7) in the System Administrator's  Refer-
     ence Manual.

NOTES
     SIGPOLL is a synonym for SIGIO.  A SIGIO will be issued when
     a  file descriptor corresponding to a STREAMS [see intro(2)]
     file  has  a  ``selectable''  event  pending.   Unless  that
     descriptor   has   been  put  into  asynchronous  mode  [see
     fcntl(2)], a process must  specifically  request  that  this
     signal   be   sent   using  the  ISETSIG  ioctl  call  [see
     streamio(4)].  Otherwise, the  process  will  never  receive
     SIGPOLL.  The handler routine can be declared:
          void handler(sig, code, scp, addr)
          int sig, code;
          struct sigcontext *scp;
          char *addr;
     Here sig is the signal number; code is a parameter  of  cer-
     tain  signals  that  provides  additional  detail;  scp is a
     pointer to the sigcontext structure (defined  in  signal.h),
     used to restore the context from before the signal; and addr
     is additional address  information.   The  signals  SIGKILL,
     SIGSTOP, and SIGCONT cannot be ignored.


















             Last change: BSD Compatibility Package             4



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