Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!bcm!dimacs.rutgers.edu!aramis.rutgers.edu!remus.rutgers.edu!plona From: plona@remus.rutgers.edu (Lawrence Plona) Newsgroups: comp.unix.internals Subject: Re: Multiplexed Special Devices Message-ID: Date: 12 Oct 90 17:54:34 GMT References: <6633@ncrcae.Columbia.NCR.COM> Organization: Rutgers Univ., New Brunswick, N.J. Lines: 129 The folowing is mpx(2) from volume one of the UNIX programmer's manual (version 7). Ritchie's STREAMS has replaced this and other multiplexing facilities with a more flexible and well thought out system. - Larry Plona ------------------------------------------------------------ NAME mpx - create and manipulate multiplexed files SYNOPSIS mpx( name, access ) char *name; join( fd, xd ) chan( xd ) extract( i, xd ) attach( i, xd ) detach( i, xd ) connect( fd, cd, end ) npgrp( i, xd, pgrp ) ckill( i, xd, signal ) #include mpxcall( cmd, vec ) int *vec; DESCRIPTION mpxcall( cmd, vec ) is the system call shared by the library routines described below. cmd selects a commend using values defined in . vec is the address of a structure containing the arguments for the command. mpx( name, access ) mpx creates and opens the file name with access permission access (see creat(2)) and returns a file descriptor available for reading and writing. A -1 is returned if the file cannot be created, if name already exists, or if the file table or other operating system data structures are full. The file descriptor is required for use with other routines. If name designates a null string, a file descriptor is returned as described but no entry is created in the file system. Once created, an mpx file may be opened (see open(2)) by any process. This provides a form of interprocess communication whereby a process B can 'call' process A by opening an mpx file created by A. To B, the file is ordinary with one exception: the connect promitive could be applied to it. Otherwise the functions described below are used only in process A and descendants that inherit the open mpx file. When a process opens an mpx file, the owner of the file receives a control message when the file is next read. The method for 'answering' this kind of call involves using attach and detach as described in more detail below. Once B has opened A's mpx file it is said to have a channel to A. A channel is a pair of data streams: in this case, one from B to A and the other from A to B. Several processes may open the same mpx file yielding multiple channels within the one mpx file. By accessing the appropriate channel, A can communicate with B and any others. When A reads (see read(2)) from the mpx file data written to A by the other processes appears in A's buffer using a record format described in mpxio(5). When A writes (see write(2)) on its mpx file the data must be formatted in a similar way. The following commands are used to manipulate mpx files and channels. join - adds a new channel on an mpx file to an open file F. I/O on the new channel is I/O on F. chan - creates a new channel. extract - file descripter maintenance. connect - similar to join except that the open file F is connected to an existing channel. attach, detach - used with call protocol. npgrp - manipulates process group numbers so that a channel can act as a control terminal (see tty(4)). ckill - send signal (see signal(2)) to process group through channel. A maximum of 15 channels may be connected to an mpx file. They are numbered 0 through 14. join may be used to make one mpx file appear as a channel on another mpx file. A hierarchy or tree of mpx files may be set up in this way. In this case one of the mpx files must be the root of a tree where the other mpx files are interior nodes. The maximum depth of such a tree is 4. ------ relentless implementation details deleted. ------ FILES /usr/include/sys/mx.h /usr/include/sgtty.h SEE ALSO mpxio(5) BUGS mpx files are an experimental part of the operating system more subject to change and prone to bugs than other parts. Maintenance programs, e.g. icheck(1), diagnose mpx files as an illegal mode. Channels may only be connected to objects in the operating system that are accessible through the line discipline mechanism. Higher performance line disciplines are needed. The maximum tree depth restriction is not really checked. A non destructive disconnect primitive (inverse of connect) is not provided. A non blocking flow control strategy based on messages defined in mpxio(5) should not be attempted by novices; the enabling ioctl commend should be protected. The join operation could be subsumed by connect. A mechanism is needed for moving a channel from one location in an mpx tree to another.