Annotation of researchv10dc/man/man4/stream.4, revision 1.1.1.1

1.1       root        1: .TH STREAM 4
                      2: .CT 2 comm_proc
                      3: .SH NAME
                      4: stream \- communication channels
                      5: .SH SYNOPSIS
                      6: .B #include <sys/filio.h>
                      7: .br
                      8: .B #include <sys/ttyio.h>
                      9: .SH DESCRIPTION
                     10: A stream is a connection between two processes, or between a process
                     11: and a device.
                     12: It is referred to by a file descriptor, and ordinary read and write
                     13: calls apply.
                     14: When a write
                     15: call is given on a stream whose other end has disappeared,
                     16: for example because the process at other end of a pipe has terminated,
                     17: or a device has hung up, signal 
                     18: .B SIGPIPE
                     19: is generated; if the signal is ignored,
                     20: the write call returns error
                     21: .BR EPIPE .
                     22: The first 64
                     23: attempts to read such a disconnected stream
                     24: return 0;
                     25: subsequent attempts generate
                     26: .B SIGPIPE
                     27: signals.
                     28: .PP
                     29: Pipes are streams;
                     30: so are most communication devices
                     31: like terminals and networks.
                     32: .PP
                     33: Line disciplines may be inserted into a stream
                     34: to do various sorts of processing.
                     35: Line disciplines within a stream
                     36: are identified by their position;
                     37: level 0 is nearest the process.
                     38: Line disciplines on
                     39: one end of a pipe cannot be seen from the other.
                     40: Line discipline types are integers;
                     41: a list is given below.
                     42: .PP
                     43: These
                     44: .I ioctl
                     45: calls,
                     46: defined in
                     47: .BR <sys/filio.h> ,
                     48: manipulate line disciplines:
                     49: .nr pW \w'\f3FIOPUSHLD  'u
                     50: .TP \n(pWu
                     51: .B FIOPUSHLD
                     52: The third argument points to an integer naming a line discipline;
                     53: insert that line discipline
                     54: at level 0.
                     55: .PD
                     56: .TP
                     57: .B FIOINSLD
                     58: The third argument points to a structure:
                     59: .RS
                     60: .LP
                     61: .EX
                     62: struct insld {
                     63:        short   ld;
                     64:        short   level;
                     65: };
                     66: .EE
                     67: .LP
                     68: Insert the line discipline named by
                     69: .B ld
                     70: in the stream
                     71: at
                     72: depth
                     73: .BR level .
                     74: If there are fewer than
                     75: .B level
                     76: line disciplines in the stream,
                     77: an error is returned.
                     78: .RE
                     79: .TP
                     80: .B FIOPOPLD
                     81: The third argument points to an integer;
                     82: remove the line discipline at that level in the stream.
                     83: A null pointer
                     84: (the usual case)
                     85: means level 0.
                     86: .TP
                     87: .B FIOLOOKLD
                     88: The third argument
                     89: points to an integer;
                     90: return the type of the line discipline at that level,
                     91: both in the same integer
                     92: and as the return value from
                     93: .IR ioctl .
                     94: A null pointer means level 0.
                     95: .PP
                     96: These
                     97: .I ioctl
                     98: calls,
                     99: also in
                    100: .BR <sys/filio.h> ,
                    101: perform other operations on streams:
                    102: .TP \n(pWu
                    103: .B FIOSNDFD
                    104: The third argument points to an integer
                    105: naming an open file descriptor.
                    106: Send a reference to that file
                    107: to the other end of the stream.
                    108: This works only on pipes.
                    109: The reference is unaffected by intervening line disciplines;
                    110: in particular it cannot be intercepted or forged by
                    111: .IR mesgld (4).
                    112: .B FIOSNDFD
                    113: returns immediately;
                    114: it does not wait for the reference to be received.
                    115: .TP
                    116: .B FIORCVFD
                    117: The third argument points to a structure:
                    118: .RS
                    119: .LP
                    120: .EX
                    121: struct passfd {
                    122:        int     fd;
                    123:        short   uid;
                    124:        short   gid;
                    125:        short   nice;
                    126:        char    logname[8];
                    127: };
                    128: .EE
                    129: .PP
                    130: Receive a file reference sent by
                    131: .BR FIOSNDFD ;
                    132: fill in the structure with a file descriptor
                    133: .B fd
                    134: for the passed file,
                    135: and the userid
                    136: .BR uid ,
                    137: groupid
                    138: .BR gid ,
                    139: login name
                    140: .BR logname ,
                    141: and scheduling priority
                    142: .BR nice
                    143: of the sending process.
                    144: The file reference must be the next message in the stream;
                    145: if data precedes it,
                    146: .B EIO
                    147: is returned.
                    148: If the stream is empty,
                    149: .B FIORCVFD
                    150: blocks until data or a file reference arrives.
                    151: .RE
                    152: .TP
                    153: .B FIONREAD
                    154: The third argument
                    155: points to an integer;
                    156: fill it in with the number of characters
                    157: that may be read from this stream without blocking.
                    158: .PP
                    159: These
                    160: .I ioctl
                    161: calls also work on streams,
                    162: but are defined in
                    163: .BR <sys/ttyio.h>
                    164: for historic reasons:
                    165: .TP \n(pWu
                    166: .B TIOCSPGRP
                    167: The third argument points to a short integer.
                    168: If the pointer is null
                    169: (the usual case),
                    170: make a new process group for the current process,
                    171: and associate the group with this stream.
                    172: If the pointer is not null,
                    173: it points to a process group id;
                    174: associate that group with this stream.
                    175: When the lowest level of a stream
                    176: receives a signal message
                    177: (like
                    178: .B SIGINT
                    179: or
                    180: .B SIGQUIT
                    181: from
                    182: .IR ttyld (4)),
                    183: the signal is sent to processes in the associated process group.
                    184: If the stream is shut down prematurely,
                    185: the process group is sent
                    186: .BR SIGHUP .
                    187: .TP
                    188: .B TIOCGPGRP
                    189: The third argument points to a short integer;
                    190: fill it in with the process group id associated with this stream.
                    191: 0 means no group.
                    192: .TP
                    193: .B TIOCEXCL
                    194: Mark this stream
                    195: so that future opens are forbidden
                    196: except to the super-user
                    197: or to processes in the associated process group.
                    198: .TP
                    199: .B TIOCNXCL
                    200: Remove the mark left by
                    201: .BR TIOCEXCL .
                    202: .TP
                    203: .B TIOCSBRK
                    204: Send a break on a serial line.
                    205: .TP
                    206: .B TIOCFLUSH
                    207: Throw away queued data anywhere in the stream.
                    208: .LP
                    209: Here is a list of line discipline types.
                    210: The names refer to global integers
                    211: defined in the C library.
                    212: .TP \n(pWu
                    213: .PD 0
                    214: .B tty_ld
                    215: Regular terminal processing,
                    216: .IR ttyld (4).
                    217: .TP
                    218: .B ntty_ld
                    219: Restricted Berkeley `new tty' terminal processing;
                    220: see the Berkeley Users Manual.
                    221: .TP
                    222: .B cdkp_ld
                    223: Character-mode Datakit universal receiver protocol,
                    224: .IR dk (4).
                    225: .TP
                    226: .B dkp_ld
                    227: Block-mode Datakit universal receiver protocol,
                    228: .IR dk (4).
                    229: .TP
                    230: .B rdk_ld
                    231: .TP
                    232: .B uxp_ld
                    233: Datakit protocols used in call setup,
                    234: .IR dk (4).
                    235: .TP
                    236: .B buf_ld
                    237: Buffering mechanism,
                    238: .IR bufld (4).
                    239: .TP
                    240: .B mesg_ld
                    241: .TP 
                    242: .B rmesg_ld
                    243: Turn stream controls into ordinary data and vice versa,
                    244: .IR mesgld (4).
                    245: .TP
                    246: .B conn_ld
                    247: Make unique connections to a server,
                    248: .IR connld (4).
                    249: .TP
                    250: .B ip_ld
                    251: .TP
                    252: .B tcp_ld
                    253: .TP
                    254: .B udp_ld
                    255: Internet protocols,
                    256: .IR internet (3).
                    257: .SH SEE ALSO
                    258: .IR ioctl (2),
                    259: .IR signal (2),
                    260: .IR mesgld (4),
                    261: .IR ipc (3)
                    262: .br
                    263: D. M. Ritchie,
                    264: `A Stream I/O System',
                    265: this manual, Volume 2

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.