index.txt
STREAM(4) Kernel Interfaces Manual STREAM(4) NAME stream - stream I/O control calls SYNOPSIS #include <sys/ioctl.h> ioctl(fd, code, param) union universe *param; DESCRIPTION A stream is a connection between two processes, or between a process and a device. It is referred to by a file descriptor, and ordinary read and write calls apply. When a write(2) call is given on a stream whose other end has disappeared, for example because the process at other end of a pipe has terminated, or a device has hung up, a SIGPIPE signal is generated; if the signal is ignored, the write call returns error EPIPE. The first several (currently 64) read(2) calls on such a disconnected streams return 0; subsequent calls generate SIGPIPE sig‐ nals. Processing modules may be inserted into streams. These ioctl calls in‐ sert, delete, inspect, and perform operations for stream IO modules. They apply to the file descriptor of any open stream object: terminal, network connection, pipe. The param argument is a general pointer which, for these calls, is usually null or a pointer to int. The codes are FIOPUSHLD inserts, at the near end of the stream, the line discipline named by the integer to which param points. A census of line disci‐ pline modules is given below. FIOINSLD inserts a named line discipline at a given level in a stack of such modules on the stream. Param points to a structure contain‐ ing two short integers respectively naming the line discipline and the level. A level of 0 could be accomplished by FIOPUSHLD. This call is under construction and may not be available yet. FIOPOPLD pops (removes) the nearest line discipline module, if param is null. If it points to an integer, the line discipline at that level is removed. The integer 0 corresponds to a null param, and (as with FIOINSLD) the non-null case may not be handled yet. FIOLOOKLD returns the number of the topmost line discipline in the stack. If param is not null but instead points to an integer, the line discipline at that level is returned in the same integer. As with push and pop, the non-null case may not be handled yet. FIOSNDFD sends the integer file descriptor pointed to by param to the process on the other end of the pipe whose file descriptor is fd. FIORCVFD delivers a structure pointed to by param: struct passfd { union { int fd; } f; short uid; short gid; short nice; short fill; }; The call blocks until there is something in the stream. If data is present, it returns EIO. If the FIOSNDFD call has sent a file descriptor to the other end of the pipe, this call fills in the user and group ID of the sending process, its niceness (prior‐ ity), and a file descriptor for the file being sent; this file is now open in the calling process. FIONREAD stores, in the integer pointed to by param, the number of charac‐ ters that may be read from this stream without possible blocking. TIOCSPGRP with null param makes this process the head of a process group and makes this stream its control stream. When signals, such as hangup, interrupt, and quit, arrive at a control stream, they are sent to its process group. Child processes inherit the process group of their parent. Process groups are created only by ex‐ plicit use of this call, and not implicitly by opening certain devices. If param is not null, it points to an integer nominat‐ ing a process group to receive signals from this stream. TIOCGPGRP stores through param an integer naming the process group associ‐ ated with the stream. TIOCEXCL marks this stream as inaccessible except by the super-user or by processes in the group associated with this stream. TIOCNXCL removes the inaccessibility of the stream. TIOCSBRK generates a message requesting a line break. The message is un‐ derstood by devices capable of generating it (such as asynchro‐ nous character devices) and ignored otherwise. TIOCFLUSH generates a message causing downstream modules to throw away any queued characters, if possible. It applies to both input and output queues. Here is a list of available line discipline modules. The magic numbers are collected in the standard library, and are accessible under the following names: tty_ld Terminal processing according to standard Seventh Edition rules; see ttyld(4). ntty_ld Terminal processing according to (modified) Berkeley `new tty' rules; see Berkeley Users Manual. cdkp_ld Character-mode Datakit URP protocol. dkp_ld Block-mode Datakit URP protocol. rdk_ld Special Datakit protocol used in connection setup. pk_ld Packet-driver protocol (obsolete). buf_ld Buffering mechanism; see bufld(4). mesg_ld, rmesg_ld Mesg_ld turns stream control blocks arriving in the read direc‐ tion into data messages, and written messages into controls. rmesg_ld does the opposite. See mesg (4). trc_ld Helps debug stream line discipline modules. conn_ld For making unique connections to servers. See connld(4). ip_ld, tcp_ld, udp_ld, arp_ld Internet protocols; see inet(3). SEE ALSO ioctl(2) D. M. Ritchie, `A Stream I/O System' BLTJ, October, 1984 DIAGNOSTICS -1 is returned for errors. STREAM(4)