SIGIO_INIT(9) | Kernel Developer's Manual | SIGIO_INIT(9)

# NAME

`sigio_init`, `sigio_free`, `sigio_copy`, `sigio_setown`, `sigio_getown` — asynchronous IO signal API

# SYNOPSIS

`#include <sys/sigio.h>`

void
`sigio_init`(struct sigio_ref *sir);

void
`sigio_free`(struct sigio_ref *sir);

void
`sigio_copy`(struct sigio_ref *dst, struct sigio_ref *src);

int
`sigio_setown`(struct sigio_ref *sir, u_long cmd, caddr_t data);

pid_t
`sigio_getown`(struct sigio_ref *sir, u_long cmd, caddr_t data);

# DESCRIPTION

The asynchronous IO signal API provides a means to manage signal registrations. It associates a process or process group with a signal source. The association is revoked automatically when the process or process group is deleted.

`sigio_init`() initializes the sigio reference sir.

`sigio_free`() clears any process or process group associated with reference sir.

`sigio_copy`() copies registration from reference src to reference dst.

`sigio_setown`() associates the reference sir with a process or process group. cmd is one of ioctl commands `FIOSETOWN`, `SIOCSPGRP` and `TIOCSPGRP`. data is a pointer to a signed integer that represents the ID of the owner of the registration. For `FIOSETOWN` and `SIOCSPGRP`, a positive ID is taken as a process ID, and a negative ID is taken as a process group ID. If cmd is `TIOCSPGRP`, a positive ID is taken as a process group ID, and negative ID values are not allowed. For all values of cmd, the reference sir is cleared if the ID is zero.

When `sigio_setown`() is called, the invoking process' credentials are stored in the reference. These credentials are checked when the reference is used with pgsigio(9).

`sigio_getown`() stores the ID of the process or process group associated with the reference sir to the signed integer pointed by data. cmd is one of ioctl commands `FIOGETOWN`, `SIOCGPGRP` and `TIOCGPGRP`. For `FIOGETOWN` and `SIOCGPGRP`, a process ID is stored as a positive ID, and a process group ID is stored as a negative ID. For `TIOCGPGRP`, a process ID is stored as a negative ID, and a process group ID is stored as a positive ID. If there is no registered owner, a zero is stored in the integer.

# CONTEXT

`sigio_init`(), `sigio_free`(), `sigio_copy`(), `sigio_setown`() and `sigio_getown`() can be called during autoconf, or from process context.

# RETURN VALUES

`sigio_setown`() returns 0 on success. Otherwise, the following error values are returned:

[`EINVAL`]
  The process group ID is invalid.
[`EPERM`]
  The invoking process belongs to another session than the process or process group.
[`ESRCH`]
  The process or process group does not exist.
[`ESRCH`]
  The process is exiting.

# SEE ALSO

pgsigio(9)

# HISTORY

The sigio routines were adapted from FreeBSD and first appeared in OpenBSD 6.5.

January 8, 2020 | Debian