Annotation of 43BSDReno/old/man/mpxio.5, revision 1.1.1.1

1.1       root        1: .\"    @(#)mpxio.5     4.1 (Berkeley) 5/15/85
                      2: .\"
                      3: .TH MPXIO 5 
                      4: .AT 3
                      5: .SH NAME
                      6: mpxio \- multiplexed i/o
                      7: .SH SYNOPSIS
                      8: .B #include <sys/mx.h>
                      9: .PP
                     10: .B #include <sgtty.h>
                     11: .SH DESCRIPTION
                     12: Data transfers on
                     13: mpx files
                     14: (see
                     15: .IR mpx (2))
                     16: are multiplexed by
                     17: imposing
                     18: a record structure  on the io stream.
                     19: Each record represents  data
                     20: from/to
                     21: a particular channel or 
                     22: a control or status message associated with a particular channel.
                     23: .PP
                     24: The prototypical data record read from an mpx file is as follows
                     25: .PP
                     26: .in +.5i
                     27: .nf
                     28: struct input_record {
                     29:        short   index;
                     30:        short   count;
                     31:        short   ccount;
                     32:        char    data[];
                     33: };
                     34: .PP
                     35: .fi
                     36: where
                     37: .I index
                     38: identifies the channel,
                     39: and
                     40: .I count
                     41: specifies the number of characters in
                     42: .I data.
                     43: If
                     44: .I count
                     45: is zero,
                     46: .I ccount
                     47: gives the size of
                     48: .I data,
                     49: and the record is  a control or status message.
                     50: Although
                     51: .I count
                     52: or
                     53: .I ccount
                     54: might be odd,
                     55: the operating system aligns records
                     56: on short (i.e. 16\-bit) boundaries
                     57: by skipping bytes when necessary.
                     58: .PP
                     59: Data written to an mpx file must be formatted as an array
                     60: of record structures defined as follows
                     61: .PP
                     62: .in +.5i
                     63: .nf
                     64: struct output_record {
                     65:        short   index;
                     66:        short   count;
                     67:        short   ccount;
                     68:        char    *data;
                     69: };
                     70: .fi
                     71: .PP
                     72: where the data portion of the record is referred
                     73: to indirectly and the other cells have the same interpretation
                     74: as in
                     75: .I input_record.
                     76: .PP
                     77: The 
                     78: control messages listed below may be read from
                     79: a multiplexed file descriptor.
                     80: They are presented as two 16-bit integers:
                     81: the first number is the message code
                     82: (defined in
                     83: .IR <sys/mx.h> ),
                     84: the second is an optional parameter meaningful
                     85: only with M_WATCH, M_BLK, and M_SIG.
                     86: .PP
                     87: .TP "\w'M_WATCH  'u"
                     88: M_WATCH
                     89: a process `wants to attach' on this channel.
                     90: The second parameter is the 16-bit 
                     91: user-id of the process that executed the open.
                     92: .TP
                     93: M_CLOSE
                     94: the channel is closed.
                     95: This message is generated when the last 
                     96: file descriptor referencing
                     97: a channel is closed.
                     98: The
                     99: .I detach
                    100: command
                    101: (see
                    102: .IR mpx (2)
                    103: should be used in response to this message.
                    104: .TP
                    105: M_EOT
                    106: indicates logical end of file on a channel.
                    107: If the channel is joined to a typewriter,
                    108: EOT (control-d)
                    109: will cause the M_EOT message 
                    110: under the conditions specified in
                    111: .IR tty (4)
                    112: for  end of file.
                    113: If the channel is attached to a process,
                    114: M_EOT will be generated whenever the process
                    115: writes zero bytes on the channel.
                    116: .TP
                    117: M_BLK
                    118: if non-blocking mode has been enabled on an
                    119: mpx file descriptor
                    120: .I xd
                    121: by executing
                    122: .IR "ioctl(xd, MXNBLK, 0)" ,
                    123: write operations on the  file are truncated in the kernel
                    124: when internal queues become full.
                    125: This is done on a per-channel basis:
                    126: the parameter 
                    127: is a count of the number of characters
                    128: not transferred to the channel on which
                    129: M_BLK is received.
                    130: .TP
                    131: M_UBLK
                    132: is generated for a channel
                    133: after M_BLK when the internal queues have
                    134: drained below a threshold.
                    135: .TP
                    136: M_SIG
                    137: is generated instead of a normal asynchronous
                    138: signal on channels that are joined to typewriters.
                    139: The parameter is the signal number.
                    140: .PP
                    141: Two other messages may be generated by the kernel.
                    142: As with other messages, the first
                    143: 16-bit quantity is the message code.
                    144: .br
                    145: .TP "\w'M_IOCTL  'u"
                    146: M_OPEN
                    147: is generated in conjunction with 
                    148: `listener' mode (see
                    149: .IR mpx (2)).
                    150: The uid of the calling process follows the message code
                    151: as with M_WATCH.
                    152: This is followed by a null-terminated string
                    153: which is the name of the file being opened.
                    154: .TP
                    155: M_IOCTL
                    156: is generated for a channel connected
                    157: to a process
                    158: when that process executes the
                    159: .I "ioctl(fd, cmd, &vec)"
                    160: call on the channel file descriptor.
                    161: The M_IOCTL code is followed by
                    162: the
                    163: .I cmd
                    164: argument given to
                    165: .I ioctl
                    166: followed by 
                    167: the contents of the structure
                    168: .I vec.
                    169: It is assumed,
                    170: not needing a better compromise at this time,
                    171: that the length of
                    172: .I vec
                    173: is determined by
                    174: .I "sizeof (struct sgttyb)"
                    175: as declared in
                    176: .IR <sgtty.h> .
                    177: .in -1i
                    178: .PP
                    179: Two control messages are understood by the operating system.
                    180: M_EOT may be sent through an mpx file to a channel.
                    181: It is equivalent to propagating a zero-length record
                    182: through the channel;
                    183: i.e. the channel is allowed to drain and the process or
                    184: device at the other end receives a zero-length
                    185: transfer before data starts flowing through the channel again.
                    186: M_IOANS can also be sent through a channel to reply to a M_IOCTL.
                    187: The format is identical to that received from M_IOCTL.
                    188: .SH SEE ALSO
                    189: mpx(2)

unix.superglobalmegacorp.com

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