Annotation of researchv10dc/man/man4/stream.4, revision 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.