Control a device
#include <sys/ioctl.h> int ioctl( int fd, int request, ... ); int ioctl_socket( int fd, int request, ... );
Function | Library | Linking option to qcc |
---|---|---|
ioctl() | libc | -l c (This library is usually included automatically.) |
ioctl_socket() | libsocket | -l socket |
The ioctl() function manipulates the underlying parameters of files. In particular, it can be used to control many of the operating attributes of files (such as the attributes of terminals).
The ioctl_socket() function is an optimized version of ioctl() that provides special handling for commands that use embedded pointers (see “Commands with special handling in ioctl_socket(),” below). It uses ioctl() for commands that don't require special handling. The fd argument must be a socket for ioctl_socket().
If you're using QNX Neutrino 6.4.1 or earlier,
use ioctl_socket() instead of ioctl()
in network applications such as packet filters.
In QNX Neutrino 6.5.0 and later, ioctl() handles embedded pointers, so you don't have to use ioctl_socket() instead. |
The request argument determines whether the subsequent arguments are an “in” or “out” parameter; it also specifies the size of the arguments in bytes.
Some ioctl() commands map to calls to fcntl(), tcgetattr(), tcsetattr(), and tcsetsid(). Other commands are transformed into a different devctl() command, and the rest are simply passed to devctl(). Here's a summary:
ioctl() command | Description | Maps to: |
---|---|---|
FIOASYNC | Set or clear asynchronous I/O | fcntl(): F_GETFL (which becomes a devctl() DCMD_ALL_GETFLAGS), followed by fcntl(): F_SETFL (which becomes a devctl() DCMD_ALL_SETFLAGS), setting or clearing O_ASYNC |
FIOCLEX | Set “close on exec” on a file descriptor | fcntl(): F_SETFD with FD_CLOEXEC |
FIOGETOWN | Get the owner | fcntl(): F_GETOWN |
FIONBIO | Set or clear non-blocking I/O | fcntl(): F_GETFL (which becomes a devctl() DCMD_ALL_GETFLAGS), followed by fcntl(): F_SETFL (which becomes a devctl() DCMD_ALL_SETFLAGS), setting or clearing O_NONBLOCK |
FIONCLEX | Remove “close on exec” | fcntl(): F_SETFD with ~FD_CLOEXEC |
FIONREAD | Get the number of bytes to read | devctl(): DCMD_CHR_ISCHARS |
FIOSETOWN | Set the owner | fcntl(): F_SETOWN |
NOSIOCGIFCONF | Get ifnet list | Passed to devctl() |
OSIOCGIFADDR | Get ifnet address | Passed to devctl() |
OSIOCGIFBRDADDR | Get broadcast address | Passed to devctl() |
OSIOCGIFCONF | Get ifnet list | Passed to devctl() |
OSIOCGIFDSTADDR | Get point-to-point address | Passed to devctl() |
OSIOCGIFNETMASK | Get net address mask | Passed to devctl() |
SIOCADDMULTI | Add multicast address | Passed to devctl() |
SIOCADDRT | Add route | Passed to devctl() |
SIOCAIFADDR | Add or change an interface alias | Passed to devctl() |
SIOCALIFADDR | Add interface address | Passed to devctl() |
SIOCATMARK | At out-of-band mark? | Passed to devctl() |
SIOCDARP | Delete ARP entry | Passed to devctl() |
SIOCDELMULTI | Delete multicast address | Passed to devctl() |
SIOCDELRT | Delete route | Passed to devctl() |
SIOCDIFADDR | Delete interface address | Passed to devctl() |
SIOCDIFPHYADDR | Delete gif addresses | Passed to devctl() |
SIOCDLIFADDR | Delete interface address | Passed to devctl() |
SIOCGARP | Get ARP entry | Passed to devctl() |
SIOCGDRVSPEC | Get driver-specific parameters | Passed to devctl() |
SIOCGETSGCNT | Get the source group packet count | Passed to devctl() |
SIOCGETVIFCNT | Get the packet count for a virtual interface | Passed to devctl() |
SIOCGHIWAT | Get high watermark | Passed to devctl() |
SIOCGIFADDR | Get the interface address | Passed to devctl() |
SIOCGIFALIAS | Get interface alias | Passed to devctl() |
SIOCGIFASYNCMAP | Get ppp asyncmap | Passed to devctl() |
SIOCGIFBRDADDR | Get broadcast address | Passed to devctl() |
SIOCGIFCAP | Get capabilities | Passed to devctl() |
SIOCGIFCONF | Return a list of interface (transport layer) addresses | Passed to devctl() |
SIOCGIFDLT | Get data link type | Passed to devctl() |
SIOCGIFDSTADDR | Get point-to-point address | Passed to devctl() |
SIOCGIFFLAGS | Get ifnet flags | Passed to devctl() |
SIOCGIFGENERIC | Generic interface get op | Passed to devctl() |
SIOCGIFMEDIA | Get net media; ioctl_socket() provides special handling for this command. | Passed to devctl() |
SIOCGIFMETRIC | Get interface metric | Passed to devctl() |
SIOCGIFMTU | Get ifnet MTU | Passed to devctl() |
SIOCGIFNETMASK | Get net address mask | Passed to devctl() |
SIOCGIFPDSTADDR | Get gif pdst address | Passed to devctl() |
SIOCGIFPSRCADDR | Get gif psrc address | Passed to devctl() |
SIOCGLIFADDR | Get interface address | Passed to devctl() |
SIOCGLIFPHYADDR | Get gif addresses | Passed to devctl() |
SIOCGLOWAT | Get low watermark | Passed to devctl() |
SIOCGPGRP | Get process group | fcntl(): F_GETOWN |
SIOCIFCREATE | Create clone interface | Passed to devctl() |
SIOCIFDESTROY | Destroy clone interface | Passed to devctl() |
SIOCIFGCLONERS | Get cloners; ioctl_socket() provides special handling for this command. | Passed to devctl() |
SIOCSARP | Set ARP entry | Passed to devctl() |
SIOCSDRVSPEC | Set driver-specific parameters | Passed to devctl() |
SIOCSHIWAT | Set high watermark | Passed to devctl() |
SIOCSIFADDR | Set ifnet address | Passed to devctl() |
SIOCSIFASYNCMAP | Set ppp asyncmap | Passed to devctl() |
SIOCSIFBRDADDR | Set broadcast address | Passed to devctl() |
SIOCSIFCAP | Set capabilities | Passed to devctl() |
SIOCSIFDSTADDR | Set point-to-point address | Passed to devctl() |
SIOCSIFFLAGS | Set ifnet flags | Passed to devctl() |
SIOCSIFGENERIC | Generic interface set op | Passed to devctl() |
SIOCSIFMEDIA | Set net media | Passed to devctl() |
SIOCSIFMETRIC | Set interface metric | Passed to devctl() |
SIOCSIFMTU | Set ifnet MTU | Passed to devctl() |
SIOCSIFNETMASK | Set net address mask | Passed to devctl() |
SIOCSIFPHYADDR | Set gif address | Passed to devctl() |
SIOCSLIFPHYADDR | Set gif addresses | Passed to devctl() |
SIOCSLOWAT | Set low watermark | Passed to devctl() |
SIOCSPGRP | Set process group | fcntl(): F_SETOWN |
TCFLSH | Flush buffers | Passed to devctl() |
TCGETA | Get the terminal's properties in a termio structure | tcgetattr() |
TCGETS | Get the terminal's properties in a termios structure | tcgetattr() |
TCSBRK | Send a break for a period of time | devctl() : DCMD_CHR_SERCTL |
TCSETA | Set the terminal's properties | tcsetattr() |
TCSETAF | Set the terminal's properties, waiting until all currently written data has been transmitted, and discarding any received but unread data | tcsetattr() |
TCSETAW | Set the terminal's properties, waiting until all currently written data has been transmitted | tcsetattr() |
TCSETS | Set the terminal's properties from a termios structure | devctl() : DCMD_CHR_TCSETATTR |
TCSETSF | Drain the output, flush the input, and set | Passed to devctl() |
TCSETSW | Drain output, set | Passed to devctl() |
TCXONC | Perform a flow-control operation on a data stream | devctl(): DCMD_CHR_TCFLOW |
TIOCCBRK | Clear the break bit | tcsetattr() |
TIOCCDTR | Clear the Data Terminal Ready line | devctl() : DCMD_CHR_LINESTATUS, followed by DCMD_CHR_SERCTL |
TIOCDRAIN | Wait until output has drained | devctl(): DCMD_CHR_TCDRAIN |
TIOCEXCL | Set exclusive use of tty | fcntl(): F_SETLK |
TIOCFLUSH | Flush buffers | devctl(): DCMD_CHR_TCFLUSH |
TIOCGETA | Get the terminal's properties in a termios structure | devctl() : DCMD_CHR_TCGETATTR |
TIOCGETC | Get special characters | tcgetattr() |
TIOCGETP | Get the terminal's parameters in a sgttyb structure | tcgetattr() |
TIOCGETPGRP | Get the process group of the tty (POSIX) | Passed to devctl() |
TIOCGLTC | Get local special characters | tcgetattr() |
TIOCGPGRP | Get the process group of the tty | devctl(): DCMD_CHR_TCGETPGRP |
TIOCGSIZE | Get window size | devctl(): DCMD_CHR_GETSIZE |
TIOCGWINSZ | Get window size | devctl(): DCMD_CHR_GETSIZE |
TIOCHPCL | Hang up on last close | tcsetattr() |
TIOCLGET | Get local modes | tcgetattr() |
TIOCLSET | Set entire local mode word | tcsetattr() |
TIOCMBIC | Clear modem port B interrupt | devctl() : DCMD_CHR_LINESTATUS, followed by DCMD_CHR_SERCTL |
TIOCMBIS | Set modem port B interrupt | devctl() : DCMD_CHR_LINESTATUS, followed by DCMD_CHR_SERCTL |
TIOCMGET | Set the state of the modem lines | devctl() : DCMD_CHR_SERCTL |
TIOCMSET | Set all modem bits | Passed to devctl() |
TIOCNOTTY | Make this terminal not be the controlling terminal for the process | tcsetsid() |
TIOCNXCL | Reset exclusive use of tty | fcntl(): F_SETLK |
TIOCOUTQ | Output queue size | devctl(): DCMD_CHR_OSCHARS |
TIOCPKT | Pty: set/clear packet mode | Passed to devctl() |
TIOCSBRK | Set break bit | Passed to devctl() |
TIOCSCTTY | Make the terminal become the controlling tty | tcsetsid() |
TIOCSDTR | Set the Data Terminal Ready line | devctl() : DCMD_CHR_LINESTATUS, followed by DCMD_CHR_SERCTL |
TIOCSETA | Set the terminal's properties from a termios structure | devctl() : DCMD_CHR_TCSETATTR |
TIOCSETAF | Drain the output, flush the input, and set | devctl(): DCMD_CHR_TCSETATTRF |
TIOCSETAW | Drain output, set | devctl(): DCMD_CHR_TCSETATTRD |
TIOCSETC | Set special characters | tcsetattr() |
TIOCSETN | Similar to TIOCSETP, but the changes are made immediately without discarding any data. | tcsetattr() |
TIOCSETP | Set the terminal's parameters in a sgttyb structure. No change is made until all currently written data has been transmitted, at which point any received but unread data is discarded. | tcsetattr() |
TIOCSETPGRP | Set the process group of the tty (POSIX) | Passed to devctl() |
TIOCSINUSE | Set exclusive use of tty | fcntl(): F_SETLK |
TIOCSLTC | Set local special characters | tcsetattr() |
TIOCSPGRP | Set the process group of the tty | devctl(): DCMD_CHR_TCSETPGRP |
TIOCSSIZE | Set the window size | devctl(): DCMD_CHR_SETSIZE |
TIOCSTART | Start output, like Ctrl-Q | Passed to devctl() |
TIOCSTI | Simulate terminal input | devctl(): DCMD_CHR_TCINJECTC |
TIOCSTOP | Stop output, like Ctrl-S | Passed to devctl() |
TIOCSWINSZ | Set window size | devctl(): DCMD_CHR_SETSIZE |
UIOCCMD | User control operator n | Passed to devctl() |
If you're writing a resource manager, note that the iofunc_devctl_default() function handles the DCMD_ALL_GETFLAGS and DCMD_ALL_SETFLAGS commands; your resource manager will need to handle all other devctl commands that apply to it. |
The ioctl_socket() function provides special handling for the commands listed below. Unless otherwise noted, it eventually passes the command to devctl().
These commands are for the Berkeley Packet Filter:
These commands are for use with cryptography:
The following commands are for use with the Packet Filtering interface; for more information, see the entry for pf in the Utilities Reference:
These commands are for use with sockets:
A value based on the request, or -1 if an error occurs (errno is set).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | No |
The ioctl() function is a Unix function that varies greatly from platform to platform.
devctl(), fcntl(), tcgetattr(), tcsetattr(), tcsetsid().