Provided by: manpages-cs-dev_4.15.0-9_all bug

JMÉNO

       signal - práce se signály v ANSI C

POUŽITÍ

       #include <signal.h>

       typedef void (*sighandler_t)(int);

       sighandler_t signal(int signum, sighandler_t handler);

POPIS

       WARNING:  the  behavior  of  signal()   varies  across  UNIX versions, and has also varied
       historically across different versions of Linux. Avoid its use: use sigaction(2)  instead.
       See Portability below.

       Systémové   volání   signal() instaluje novou obslužnou funkci pro signál s číslem signum.
       Obsluha signálu je nastavena na  handler, což může být uživatelsky definovaná funkce  nebo
       SIG_IGN případně SIG_DFL.

       Pokud je signál signum přijat procesem, stane se jedna z následujících věcí:

       *  Je-li nastaveno SIG_IGN signál je ignorován.

       *  If  the  disposition  is  set  to  SIG_DFL, then the default action associated with the
          signal (see signal(7))  occurs.

       *  Pokud je dispozice nastavena na funkci, pak je nejdřív buď znovu nastavena dispozice na
          SIG_DFL nebo je signál blokován (viz Přenositelnost níže) a obslužná funkce je volána s
          parametrem signum. Pokud volání funkce zablokovalo signál,  je  signál  odblokován  při
          návratu z obslužné funkce.

       Signály SIGKILL a SIGSTOP nemohou být odchyceny nebo blokovány.

NÁVRATOVÉ HODNOTY

       signal()  returns the previous value of the signal handler On failure, it returns SIG_ERR,
       and errno is set to indicate the error.

CHYBOVÉ STAVY

       EINVAL signum je neplatný.

SPLŇUJE STANDARDY

       POSIX.1-2001, POSIX.1-2008, C89, C99.

POZNÁMKY

       Efekt funkce signal() v procesech s vlákny nejsou specifikovány.

       Dle specifikace POSIX je chování systému nespecifikováno, pokud  ignoruje  SIGFPE,  SIGILL
       nebo  SIGSEGV  signál pokud nebyl vyvolán pomocí kill(2) nebo raise(3). Celočíselné dělení
       nulou má nedefinovaný výsledek. Na některých architekturách  se  generuje  SIGFRE  signál.
       (Také  dělení  největšího  záporného  celého  čísla -1 generuje SIGFRE). Ignorování tohoto
       signálu může vést k nekonečné smyčce.

       See sigaction(2)  for details on what happens when  the  disposition  SIGCHLD  is  set  to
       SIG_IGN.

       Viz  signal-safety(7) pro seznam asynchronních bezpečných funkcí, které mohou být bezpečně
       volány uvnitř funkce pro obsluhu signálu.

       The use of sighandler_t is a GNU extension, exposed if _GNU_SOURCE is defined; glibc  also
       defines   (the   BSD-derived)    sig_t   if  _BSD_SOURCE  (glibc  2.19  and  earlier)   or
       _DEFAULT_SOURCE (glibc 2.19 and later)  is defined.  Without  use  of  such  a  type,  the
       declaration of signal()  is the somewhat harder to read:

           void ( *signal(int signum, void (*handler)(int)) ) (int);

   Přenositelnost
       Jediné  přenositelné  použití  funkce signal() je nastavit obsluhu signálu na SIG_DFL nebo
       SIG_IGN. Sémantika použití signal() na  nastavení  obsluhy  signálu  se  liší  na  různých
       systémech (a POSIX.1 tot explicitně podporuje). Proto jej nepoužívejte za tímto účelem.

       POSIX.1  vyřešil  tento nesoulad v přenositelnosti zavedením sigaction(2), který poskytuje
       explicitní kontrolu sémantiky v případě vyvolání obsluhy  signálu.  Používejte  jej  proto
       místo signal()u.

       In  the  original  UNIX  systems,  when a handler that was established using signal()  was
       invoked by the delivery of a signal, the disposition of  the  signal  would  be  reset  to
       SIG_DFL, and the system did not block delivery of further instances of the signal. This is
       equivalent to calling sigaction(2)  with the following flags:

           sa.sa_flags = SA_RESETHAND | SA_NODEFER;

       System V also provides these semantics for signal(). This was bad because the signal might
       be  delivered  again  before  the handler had a chance to reestablish itself. Furthermore,
       rapid deliveries of the same signal could result in recursive invocations of the handler.

       BSD improved on this situation, but  unfortunately  also  changed  the  semantics  of  the
       existing signal()  interface while doing so. On BSD, when a signal handler is invoked, the
       signal disposition is not reset, and further instances of  the  signal  are  blocked  from
       being delivered while the handler is executing. Furthermore, certain blocking system calls
       are automatically restarted if interrupted by a signal handler (see  signal(7)).  The  BSD
       semantics are equivalent to calling sigaction(2)  with the following flags:

           sa.sa_flags = SA_RESTART;

       Situace na Linuxu je následující:

       * Systémové volání jádra signal() poskytuje System V sémantiku.

       * By  default,  in  glibc  2 and later, the signal()  wrapper function does not invoke the
         kernel system call.  Instead,  it  calls  sigaction(2)   using  flags  that  supply  BSD
         semantics. This default behavior is provided as long as a suitable feature test macro is
         defined: _BSD_SOURCE on glibc 2.19 and earlier or  _DEFAULT_SOURCE  in  glibc  2.19  and
         later.  (By default, these macros are defined; see feature_test_macros(7)  for details.)
         If such a feature test macro is not defined, then signal()  provides System V semantics.

DALŠÍ INFORMACE

       kill(1),  alarm(2),   kill(2),   pause(2),   sigaction(2),   signalfd(2),   sigpending(2),
       sigprocmask(2),   sigsuspend(2),   bsd_signal(3),  killpg(3),  raise(3),  siginterrupt(3),
       sigqueue(3), sigsetops(3), sigvec(3), sysv_signal(3), signal(7)

TIRÁŽ

       Tato stránka je součástí projektu Linux man-pages v5.13.  Popis  projektu  a  informace  o
       hlášení chyb najdete na https://www.kernel.org/doc/man-pages/.

PŘEKLAD

       Překlad  této příručky do španělštiny vytvořili Marek Kubita <Kubitovi@mbox.lantanet.cz> a
       Pavel Heimlich <tropikhajma@gmail.com>

       Tento překlad je bezplatná dokumentace; Přečtěte si GNU General Public License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ nebo novější ohledně podmínek autorských práv.
       Neexistuje ŽÁDNÁ ODPOVĚDNOST.

       Pokud narazíte na nějaké  chyby  v  překladu  této  příručky,  pošlete  e-mail  na  adresu
       ⟨translation-team-cs@lists.sourceforge.net⟩.