Go to the previous, next section.
int ioctl(int d, int cmd, ...);
The third argument is called char *argp.
d: [in] the file descriptor of the file to manipulate.
cmd: [in] the type of request.
argp: depends on the request.
Controls the io parameters of character special devices (tty, mt, etc.). The values that cmd may take for file operations are:
FIOCLEX
FIONCLEX
FIONBIO
O_NONBLOCK flag, otherwise it
clears the flag.
FIOASYNC
O_SYNC flag, otherwise it
clears the flag. (This flag is not used as of Linux 1.0.)
FIONREAD
FIOSETOWN
SIGURG and SIGIO signals. (Only for
sockets.)
FIOGETOWN
FIGETBSZ
FIBMAP
MTIOCTOP
mtop structure.
MTIOCGET
mtget
structure.
MTIOCPOS
The section on magnetic tapes will remain incomplete for a while... I don't have a clue how it is supposed to work.
The values for sockets operations are:
SIOCSPGRP
FIOSETOWN.
SIOCGPGRP
FIOGETOWN.
SIOCATMARK
SIOCADDRT
rtentry structure.
SIOCDELRT
rtentry structure.
SIOCADDRTOLD
SIOCADDRT but uses an old_rtentry structure.
Obsolete. Do not use.
SIOCDELRTOLD
SIOCDELRT but uses an old_rtentry structure.
Obsolete. Do not use.
SIOCDARP
arpreq structure.
SIOCGARP
arpreq structure.
SIOCSARP
arpreq structure.
IP_SET_DEV
SIOCGIFCONF
ifconf
structure.
SIOCGIFFLAGS
ifreq
structure.
SIOCSIFFLAGS
ifreq
structure. The calling task must have superuser privileges.
SIOCGIFADDR
ifreq
structure.
SIOCSIFADDR
ifreq
structure. The calling task must have superuser privileges.
SIOCGIFDSTADDR
ifreq
structure.
SIOCSIFDSTADDR
ifreq
structure. The calling task must have superuser privileges.
SIOCGIFBRDADDR
ifreq structure.
SIOCSIFBRDADDR
ifreq structure. The calling task must have superuser privileges.
SIOCGIFNETMASK
ifreq
structure.
SIOCSIFNETMASK
ifreq
structure. The calling task must have superuser privileges.
SIOCGIFMETRIC
ifreq
structure.
SIOCSIFMETRIC
ifreq
structure. The calling task must have superuser privileges.
SIOCGIFMEM or SIOCSIFMEM
SIOCGIFMTU
ifreq structure.
SIOCSIFMTU
ifreq structure. The calling task must have superuser privileges.
SIOCSIFLINK
SIOCGIFHWADDR
ifreq structure.
SIOCSIFHWADDR
SIOCGIFNAME
DDIOCSDBG:
struct rtentry {
unsigned long rt_hash; /* hash key for lookups */
struct sockaddr rt_dst; /* target address */
struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */
struct sockaddr rt_genmask; /* target network mask (IP) */
short rt_flags;
short rt_refcnt;
unsigned long rt_use;
struct ifnet *rt_ifp;
short rt_metric; /* +1 for binary compatibility! */
char *rt_dev; /* forcing the device at add */
};
struct old_rtentry {
unsigned long rt_genmask;
struct sockaddr rt_dst;
struct sockaddr rt_gateway;
short rt_flags;
short rt_refcnt;
unsigned long rt_use;
char *rt_dev;
};
rt_flags is a or'ed combinaison of one or more of the following:
RTF_UP
RTF_GATEWAY
RTF_HOST
struct arpreq {
struct sockaddr arp_pa; /* protocol address */
struct sockaddr arp_ha; /* hardware address */
int arp_flags; /* flags */
};
The arp_flags member may be one or more or'ed values of the
following:
ATF_INUSE
ATF_COM
ATF_PERM
ATF_PUBL
ATF_USETRAILERS
Here is the layout of the ifconf structure used to get the
configuration list:
struct ifconf {
int ifc_len; /* size of buffer */
union {
caddr_t ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu;
};
Here is the layout of the ifreq structure used to send/receive
interface data:
struct ifreq {
#define IFHWADDRLEN 6
#define IFNAMSIZ 16
union {
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
char ifrn_hwaddr[IFHWADDRLEN];
} ifr_ifrn;
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
short ifru_flags;
int ifru_metric;
int ifru_mtu;
caddr_t ifru_data;
} ifr_ifru;
};
For terminal I/O, the following commands may be used:
TCGETS
termios structure associated with the terminal.
argp points to a termios structure.
TCSETS
termios structure associated with the terminal. The
change is immediate. argp points to a termios structure.
TCSETSW
TCSETS but wait until the output buffer is empty before
performing the change.
TCSETSF
TCSETS but wait until the output buffer is empty and
flushes the input buffer before performing the change.
TCGETA
termio structure associated with the terminal.
argp points to a termio structure.
TCSETS
termio structure associated with the terminal. The
change is immediate. argp points to a termio structure.
TCSETAW
TCSETA but wait until the output buffer is empty before
performing the change.
TCSETAF
TCSETA but wait until the output buffer is empty and
flushes the input buffer before performing the change.
TCXONC
TCOOFF
TCOON
TCIOFF
TCION
TCFLSH
TCIFLUSH to flush the input,
TCOFLUSH to flush the output or TCIOFLUSH to flush both.
TIOCEXCL
open operations on the
terminal are permited.
TIOCNXCL
open operations are now permitted.
TIOCSCTTY
TIOCGPGRP
TIOCSPGRP
TIOCOUTQ
TIOCSTI
TIOCGWINSZ
winsize structure pointed to by
argp.
TIOCSWINSZ
winsize structure pointed to by
argp.
TIOCCONS
TIOCNOTTY
TIOCGETD
TIOCSETD
TIOCGLCKTRMIOS
termios structure of the terminal.
argp points to a termios structure.
TIOCSLCKTRMIOS
termios structure of the terminal.
argp points to a termios structure that contains the new
flags. The calling task must have superuser privileges.
TIOCPKT
packet flag in the tty structure,
otherwise it sets the flag to zero. (What purpose does that serves?)
TIOCLINUX
TCSBRK
TCSBRKP
TCSBRK?
On success zero is returned. On error, -1 is returned and errno is
set to one of the following values:
EINVAL: cmd or argp have an invalid value.
ENOTTY: d is not a character special device or the
request made on d is not valid for this type of device.
EBADF.
Go to the previous, next section.