13d729aecSJerry Jelinek.\" 23d729aecSJerry Jelinek.\" This file and its contents are supplied under the terms of the 33d729aecSJerry Jelinek.\" Common Development and Distribution License ("CDDL"), version 1.0. 43d729aecSJerry Jelinek.\" You may only use this file in accordance with the terms of version 53d729aecSJerry Jelinek.\" 1.0 of the CDDL. 63d729aecSJerry Jelinek.\" 73d729aecSJerry Jelinek.\" A full copy of the text of the CDDL should have accompanied this 83d729aecSJerry Jelinek.\" source. A copy of the CDDL is also available via the Internet at 93d729aecSJerry Jelinek.\" http://www.illumos.org/license/CDDL. 103d729aecSJerry Jelinek.\" 113d729aecSJerry Jelinek.\" Copyright 2015, Joyent, Inc. 123d729aecSJerry Jelinek.\" 13*f4a5523cSCody Peter Mello.Dd "April 9, 2016" 143d729aecSJerry Jelinek.Dt SIGNALFD 3C 153d729aecSJerry Jelinek.Os 163d729aecSJerry Jelinek.Sh NAME 173d729aecSJerry Jelinek.Nm signalfd 183d729aecSJerry Jelinek.Nd create or modify a file descriptor for signal handling 193d729aecSJerry Jelinek.Sh SYNOPSIS 203d729aecSJerry Jelinek.In sys/signalfd.h 213d729aecSJerry Jelinek. 223d729aecSJerry Jelinek.Ft int 233d729aecSJerry Jelinek.Fo signalfd 243d729aecSJerry Jelinek.Fa "int fd" 253d729aecSJerry Jelinek.Fa "const sigset_t *mask" 263d729aecSJerry Jelinek.Fa "int flags" 273d729aecSJerry Jelinek.Fc 283d729aecSJerry Jelinek. 293d729aecSJerry Jelinek.Sh DESCRIPTION 303d729aecSJerry JelinekThe 313d729aecSJerry Jelinek.Fn signalfd 323d729aecSJerry Jelinekfunction returns a file descriptor that can be used 333d729aecSJerry Jelinekfor synchronous consumption of signals. The file descriptor can be operated 343d729aecSJerry Jelinekupon via 353d729aecSJerry Jelinek.Xr read 2 363d729aecSJerry Jelinekand the facilities that notify of file descriptor activity (e.g. 373d729aecSJerry Jelinek.Xr poll 2 , 383d729aecSJerry Jelinek.Xr port_get 3C , 393d729aecSJerry Jelinek.Xr epoll_wait 3C 403d729aecSJerry Jelinek). To dispose of the instance 413d729aecSJerry Jelinek.Xr close 2 423d729aecSJerry Jelinekshould be called on the file descriptor. 433d729aecSJerry Jelinek.Pp 443d729aecSJerry JelinekIf the 453d729aecSJerry Jelinek.Va fd 463d729aecSJerry Jelinekargument is -1, a new signalfd file descriptor will be 473d729aecSJerry Jelinekreturned, otherwise the 483d729aecSJerry Jelinek.Va fd 493d729aecSJerry Jelinekargument should be an existing signalfd file descriptor whose signal mask will 503d729aecSJerry Jelinekbe updated. 513d729aecSJerry Jelinek.Pp 523d729aecSJerry JelinekThe 533d729aecSJerry Jelinek.Va mask 543d729aecSJerry Jelinekargument specifies the set of signals that are relevant to the file descriptor. 553d729aecSJerry JelinekIt may be manipulated with the standard signal set manipulation functions 563d729aecSJerry Jelinekdocumented in 573d729aecSJerry Jelinek.Xr sigsetops 3C . 583d729aecSJerry JelinekSignals in the mask which cannot be caught (e.g. 593d729aecSJerry Jelinek.Fa SIGKILL ) 603d729aecSJerry Jelinekare ignored. 613d729aecSJerry Jelinek.Pp 623d729aecSJerry JelinekThe 633d729aecSJerry Jelinek.Va flags 643d729aecSJerry Jelinekargument specifies additional parameters for the instance, and can have any of 653d729aecSJerry Jelinekthe following values: 663d729aecSJerry Jelinek.Bl -tag -width Dv 673d729aecSJerry Jelinek.It Sy SFD_CLOEXEC 683d729aecSJerry JelinekInstance will be closed upon an 693d729aecSJerry Jelinek.Xr exec 2 ; 703d729aecSJerry Jelineksee description for 713d729aecSJerry Jelinek.Fa O_CLOEXEC 723d729aecSJerry Jelinekin 733d729aecSJerry Jelinek.Xr open 2 . 743d729aecSJerry Jelinek.It Sy SFD_NONBLOCK 753d729aecSJerry JelinekInstance will be set to be non-blocking. A 763d729aecSJerry Jelinek.Xr read 2 773d729aecSJerry Jelinekon a signalfd instance that has been initialized with 783d729aecSJerry Jelinek.Fa SFD_NONBLOCK , 793d729aecSJerry Jelinekor made non-blocking in other ways, will return 803d729aecSJerry Jelinek.Er EAGAIN 813d729aecSJerry Jelinekin lieu of blocking if there are no signals from the 823d729aecSJerry Jelinek.Va mask 833d729aecSJerry Jelinekthat are pending. 843d729aecSJerry Jelinek.El 853d729aecSJerry Jelinek.Pp 863d729aecSJerry JelinekAs with 873d729aecSJerry Jelinek.Xr sigwait 2 , 883d729aecSJerry Jelinekreading a signal from the file descriptor will consume the signal. The signals 893d729aecSJerry Jelinekused with signalfd file descriptors are normally first blocked so that their 903d729aecSJerry Jelinekhandler does not run when a signal arrives. If the signal is not blocked the 913d729aecSJerry Jelinekbehavior matches that of 923d729aecSJerry Jelinek.Xr sigwait 2 ; 933d729aecSJerry Jelinekif a 943d729aecSJerry Jelinek.Xr read 2 953d729aecSJerry Jelinekis pending then the signal is consumed by the read, otherwise the signal is 963d729aecSJerry Jelinekconsumed by the handler. 973d729aecSJerry Jelinek.Pp 983d729aecSJerry JelinekThe following operations can be performed upon a signalfd file descriptor: 993d729aecSJerry Jelinek.Bl -tag -width Dv 1003d729aecSJerry Jelinek.It Sy read(2) 1013d729aecSJerry JelinekReads and consumes one or more of the pending signals that match the file 1023d729aecSJerry Jelinekdescriptor's 1033d729aecSJerry Jelinek.Va mask . 1043d729aecSJerry JelinekThe read buffer must be large enough to hold one or more 1053d729aecSJerry Jelinek.Vt signalfd_siginfo 1063d729aecSJerry Jelinekstructures, which is described below. 1073d729aecSJerry Jelinek.Xr read 2 1083d729aecSJerry Jelinekwill block if there are no matching signals pending, or return 1093d729aecSJerry Jelinek.Er EAGAIN 1103d729aecSJerry Jelinekif the instance was created with 1113d729aecSJerry Jelinek.Fa SFD_NONBLOCK . 1123d729aecSJerry JelinekAfter a 1133d729aecSJerry Jelinek.Xr fork 2 , 1143d729aecSJerry Jelinekif the child reads from the descriptor it will only consume signals from itself. 1153d729aecSJerry Jelinek.It Sy poll(2) 1163d729aecSJerry JelinekProvide notification when one of the signals from the 1173d729aecSJerry Jelinek.Va mask 1183d729aecSJerry Jelinekarrives. 1193d729aecSJerry Jelinek.Fa POLLIN 1203d729aecSJerry Jelinekand 1213d729aecSJerry Jelinek.Fa POLLRDNORM 1223d729aecSJerry Jelinekwill be set. 1233d729aecSJerry Jelinek.It Sy close(2) 1243d729aecSJerry JelinekCloses the desriptor. 1253d729aecSJerry Jelinek.El 1263d729aecSJerry Jelinek.Pp 1273d729aecSJerry JelinekThe 1283d729aecSJerry Jelinek.Vt signalfd_siginfo 1293d729aecSJerry Jelinekstructure returned from 1303d729aecSJerry Jelinek.Xr read 2 1313d729aecSJerry Jelinekis a fixed size 128 byte structure defined as follows: 1323d729aecSJerry Jelinek.Bd -literal 1333d729aecSJerry Jelinektypedef struct signalfd_siginfo { 1343d729aecSJerry Jelinek uint32_t ssi_signo; /* signal from signal.h */ 1353d729aecSJerry Jelinek int32_t ssi_errno; /* error from errno.h */ 1363d729aecSJerry Jelinek int32_t ssi_code; /* signal code */ 1373d729aecSJerry Jelinek uint32_t ssi_pid; /* PID of sender */ 1383d729aecSJerry Jelinek uint32_t ssi_uid; /* real UID of sender */ 1393d729aecSJerry Jelinek int32_t ssi_fd; /* file descriptor (SIGIO) */ 1403d729aecSJerry Jelinek uint32_t ssi_tid; /* unused */ 1413d729aecSJerry Jelinek uint32_t ssi_band; /* band event (SIGIO) */ 1423d729aecSJerry Jelinek uint32_t ssi_overrun; /* unused */ 1433d729aecSJerry Jelinek uint32_t ssi_trapno; /* trap number that caused signal */ 1443d729aecSJerry Jelinek int32_t ssi_status; /* exit status or signal (SIGCHLD) */ 1453d729aecSJerry Jelinek int32_t ssi_int; /* unused */ 1463d729aecSJerry Jelinek uint64_t ssi_ptr; /* unused */ 1473d729aecSJerry Jelinek uint64_t ssi_utime; /* user CPU time consumed (SIGCHLD) */ 1483d729aecSJerry Jelinek uint64_t ssi_stime; /* system CPU time consumed (SIGCHLD) */ 1493d729aecSJerry Jelinek uint64_t ssi_addr; /* address that generated signal */ 1503d729aecSJerry Jelinek uint8_t ssi_pad[48]; /* pad size to 128 bytes */ 1513d729aecSJerry Jelinek} signalfd_siginfo_t; 1523d729aecSJerry Jelinek.Ed 1533d729aecSJerry Jelinek.Sh RETURN VALUES 154*f4a5523cSCody Peter MelloUpon successful completion, a file descriptor associated with the instance 1553d729aecSJerry Jelinekis returned. Otherwise, -1 is returned and errno is set to indicate the error. 1563d729aecSJerry JelinekWhen 1573d729aecSJerry Jelinek.Va fd 1583d729aecSJerry Jelinekis not -1 and there is no error, the value of 1593d729aecSJerry Jelinek.Va fd 1603d729aecSJerry Jelinekis returned. 1613d729aecSJerry Jelinek.Sh ERRORS 1623d729aecSJerry JelinekThe 1633d729aecSJerry Jelinek.Fn signalfd function 1643d729aecSJerry Jelinekwill fail if: 1653d729aecSJerry Jelinek.Bl -tag -width Er 1663d729aecSJerry Jelinek.It Er EBADF 1673d729aecSJerry JelinekThe 1683d729aecSJerry Jelinek.Va fd 1693d729aecSJerry Jelinekdescriptor is invalid. 1703d729aecSJerry Jelinek.It Er EFAULT 1713d729aecSJerry JelinekThe 1723d729aecSJerry Jelinek.Va mask 1733d729aecSJerry Jelinekaddress is invalid. 1743d729aecSJerry Jelinek.It Er EINVAL 1753d729aecSJerry JelinekThe 1763d729aecSJerry Jelinek.Va fd 1773d729aecSJerry Jelinekdescriptor is not a signalfd descriptor or the 1783d729aecSJerry Jelinek.Va flags 1793d729aecSJerry Jelinekare invalid. 1803d729aecSJerry Jelinek.It Er EMFILE 1813d729aecSJerry JelinekThere are currently 1823d729aecSJerry Jelinek.Va OPEN_MAX 1833d729aecSJerry Jelinekfile descriptors open in the calling process. 1843d729aecSJerry Jelinek.It Er ENODEV 1853d729aecSJerry JelinekUnable to allocate state for the file descriptor. 1863d729aecSJerry Jelinek.El 1873d729aecSJerry Jelinek.Sh SEE ALSO 1883d729aecSJerry Jelinek.Xr poll 2 , 1893d729aecSJerry Jelinek.Xr sigwait 2 , 1903d729aecSJerry Jelinek.Xr sigsetops 3C , 1913d729aecSJerry Jelinek.Xr sigwaitinfo 3C , 1923d729aecSJerry Jelinek.Xr signal.h 3HEAD 193