Query: pty
OS: hpux
Section: 7
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
pty(7) Miscellaneous Information Manual pty(7)NAMEpty - pseudo-terminal driverDESCRIPTIONThe driver provides support for a device-pair termed a pseudo terminal. A pseudo terminal is a pair of character devices, a master device and a slave device. The slave device provides to application processes an interface identical to that described in termio(7). Unlike all other devices that provide the interface described in termio(7), the slave device does not have a hardware device behind it. Instead, it has another process manipulating it through the master half of the pseudo terminal. Thus anything written on the master device is given to the slave device as input, and anything written on the slave device is presented as input on the master device. ---------------- | pty functions | Application <--> |----------------| <--> Server Processes | Slave | Master | Process | (pts) | (ptm) | ---------------- Open and Close Processing The slave side of the interprets opening or closing the master side as a modem connection or disconnection on a real terminal. Only one open to the master side of a is permitted. An attempt to open an already open master side returns and sets the external variable to An attempt to open the master side of a that has a slave with an open file descriptor returns and sets to The potential problem of being found busy at opens can be avoided by using the clone open functionality discussed in the next section. An attempt to open a nonexistent returns and sets to If is not specified, opens on the slave side hang until the master side is opened. If is specified, opens on the slave side return error if the master side is closed. Any or request made on the slave side of a after the mas- ter side is closed returns and sets the external variable to A request made on the slave side of a after the master side is closed returns 0 bytes. Closing the master side of a sends a hangup signal to the tty process group number of the corresponding slave side and flushes pending input and output. Clone Open In typical usage, there is no preference among pairs. Thus, it is useful to be able to issue a single that internally opens any available An open on returns an open file descriptor of a free master device. If there are no free devices, the open returns and sets to The name of the slave device corresponding to the opened master device can be found through a request. Processing ioctl() Requests By default, any request defined by termio(7) is recognized by both the master and slave sides of a These requests are processed by the driver as specified by termio(7). In addition, the requests defined below are recognized by the master side of a The slave side only rec- ognizes requests defined by termio(7). An request made on the slave side of a after the master side is closed returns and sets the exter- nal variable to An request not recognized by the returns and sets the external variable to Note that some of the master-side-only requests affect which requests are recognized by the master and slave side of the These master-side-only requests also affect the way recognized requests, requests, and requests are processed by the driver. The following requests, defined in apply only to the master side of Cause a signal to be sent from the slave side of the to the current tty process group of the slave side. The value of the parameter is taken to be the signal number sent. An error is returned and no signal is sent if the specified signal number does not refer to a legitimate signal (see sig- nal(5)). Note that this request allows the server process to send signals to processes not owned by the same user ID. Enable or disable all processing by a processing is enabled if the addressed by arg is nonzero and disabled if the addressed by arg is zero. By default, processing is enabled. processing refers to processing of input and output described by termio(7) (such as tab expansion), as well as the processing of the requests described by termio(7). When disabled, all input and output data is passed through the without modification. Issuing a request flushes all data buffered in the pseudo terminal and releases any processes blocked waiting for data. Enabling and disabling affects the operation of the following requests: and When is enabled, all requests execute as specified in termio(7), regardless of the side from which the request is made. When is disabled, master side requests set and return the the external variable to Slave side requests are processed like any other request when is disabled. In particular, slave side requests set and return the external variable to when both and are disabled. (See the discussion of and trapping below). requests not defined by termio(7) are not affected by the state of Data written through a pseudo terminal with disabled is handled in a manner similar to data flowing through a pipe. A write request blocks in the until all data has been written into the A read request blocks if there is no data available unless the flag is set (see fcntl(2)). When data is available to be read, the read request returns whatever is available, and does not wait for the number of bytes requested to be satisfied. The number of bytes a can contain in its internal memory is implementation dependent, but is at least 256 bytes in each direction. For example, a write on the slave side of a of 1024 bytes might be read on the master side by four read requests returning 256 bytes each. The size of the chunks of data that are read is not guaranteed to be consistent, but no data is lost. The following requests, defined in apply only to the master side of a In particular, these requests enable/disable specific modes of driver operation. These requests work in series with that is, the mode must be enabled by its request and must be enabled for the mode to oper- ate. The mode can be enabled or disabled regardless of the state of Enable or disable packet mode. Packet mode is enabled if the addressed by arg is nonzero and disabled if the addressed by arg is zero. By default, packet mode is disabled. When applied to the master side of a pseudo terminal, each subsequent from the master side returns data written on the slave part of the pseudo terminal preceded by a zero byte (symbolically defined as or a single byte reflect- ing control status information. The value of such a status byte is composed of zero or more bit flags: The read queue for the slave side has been flushed. The write queue for the slave side has been flushed. Data flowing from the slave side of the to the master side has been stopped by means of or Data flowing from the slave side of the to the master side has been restarted. Stop and start characters have been set to or Stop and start characters are set to something other than or Enable or disable remote mode. Remote mode is enabled if the value of arg is nonzero and disabled if the value of arg is zero. By default, remote mode is disabled. Remote mode is independent of packet mode. This mode causes input to the pseudo terminal to be flow controlled and not input edited (regardless of the terminal mode). Each write to the master side produces a record boundary for the process reading the slave side. In normal usage, writing data is like typing the data as a line on a terminal; writing zero bytes is equivalent to typing an end-of-file character (that is, the EOF character as defined in termio(7)). The data read by the slave side is identical to the data written on the master side. Data written on the slave side and read on the mas- ter side with enabled is still subject to the normal termio(7) processing. can be used when doing remote line editing in a window manager, or whenever flow-controlled input is required. Issuing a request flushes all data buffered in the pseudo terminal. The following requests, defined in apply only to the master side of In particular, these requests are only recognized when is enabled. When is disabled, these requests set and return the external variable to Cause a break operation to be done on the slave side of the as if a user had pressed the break key on a real terminal. Takes no parameter. Stop data flowing from the slave side of the to the master side (equivalent to typing Takes no parameter. Restart output (stopped by or by typing Takes no parameter. Flow-Control Input and Output Processing The following terms are used to describe the flow of data through pseudo terminals. INPUT refers to data flowing from the master side of a to the slave side. OUTPUT refers to data flowing from the slave side of a to the master side. When packet mode is disabled and INPUT is stopped (see IXOFF, input modes, in termio(7)), the next from the master side of a returns a STOP character. When INPUT is restarted, the next from the master side returns a START character. If packet mode is enabled, the STOP or START character is preceded by a data packet indicator should be used by the master-side server before each request to properly handle INPUT flow control (see select(2)). When INPUT flow control is enabled, and are handled as follows: Write-selects on the master side of a return true only if INPUT has not been stopped. If INPUT becomes stopped while data is being written into the master side of a the write returns with the number of bytes written before INPUT was stopped. Writes done after INPUT is stopped return immediately with zero bytes written. When packet mode is disabled and OUTPUT is stopped (see IXON, input modes in termio(7)), each subsequent from the master side of a returns with no data read. When OUTPUT is restarted, each subsequent from the master side returns data written on the slave side. If packet mode is enabled, the first after OUTPUT has been stopped returns a packet. All subsequent reads from the master side while OUTPUT is stopped returns a packet with no data. When OUTPUT is restarted, the next from the master side returns a packet. All subsequent reads from the master side return data written on the slave side preceded by a packet. should be used by the master-side server before each to properly handle OUTPUT flow control. Otherwise, reads from the master side of a will not be prevented when OUTPUT is stopped. Trapping ioctl(), open(), close() Requests When trapping is enabled, the master side is notified when the application on its slave side makes an or request. For trapped and requests, the slave side is blocked (that is, the request does not complete) until the server on its master side acknowledges the trapped request. For trapped requests, the slave slave does not block for an acknowledgement. should be used by the master side server to receive notification of trapped and requests. When one of these requests is trapped, the returns with an "exceptional condition" indicated for the slave side's file descriptor. Other mechanisms for receiving notification of trapped requests are defined below, but these mechanisms should be used only if is not available. When trapping is disabled (default condition), unrecognized slave requests return an error, with the external variable set to The only requests recognized by the slave side are those defined by termio(7) and only when is enabled. When is disabled, no requests are recog- nized by the slave side. If trapping is enabled and the master side closes, trapping is disabled. If the master closes during the middle of a handshake with the slave, the handshake is done automatically. Trapping occurs in two forms that are identified by the requests that enable or disable them -- and These two forms are distinguished by the types of requests they affect and by the capabilities they provide. Trapping and requests is enabled or disabled by Trapping requests not defined by termio(7) are enabled or disabled by Trapping requests defined by termio(7) are enabled or disabled by only when is also disabled. When is enabled, trapping requests defined by termio(7) are enabled or disabled by Briefly, both and trapping allow the server on the master side to examine the request's parameters, the pid making the request, etc. In addition, trapping allows the server to modify the parameters and return values of an request. The following calls apply only to the master side of a and pertain to trapping and requests. They are defined in Enable or disable trapping of and requests made by the application on the slave side of a Trapping is enabled if the addressed by arg is nonzero and dis- abled if the addressed by arg is zero. By default, trapping is disabled. Check for a pending or trap. The argument points to an that is set to one if a trap is pending and to zero if nothing is pending. Use when the preferred method of a "exceptional condition" is not available. Return the trapped or information to the master side. Use in response to either a "exceptional condition" or a indicating that a trap is pend- ing. A reads the pending or information into the memory pointed to by the arg of The information takes the form of the fol- lowing structure, defined in All elements of refer to the slave side of the and include the following: The command received. The request applied to master side to receive the trapped structure, if one exists (a zero value means there is none). (When nonzero, is a request with the size field precomputed.) The request applied to master side to send back the resulting structure, if one exists (a zero value means there is none). (When nonzero, is a request with the size field precomputed.) The process group number of the process doing the operation. The process ID of the process doing the operation. The external variable error code (initialized to zero) returned by on the slave side. When open error mode is enabled, can be used to return an error for trapped slave requests. See the discussion of the for further information on open error mode. The success value (initialized to zero) returned by on the slave side when is not set. When the argument received on the slave side is not a pointer, its value is stored as four bytes retrievable with an request to the master side equal to When an or is being passed, is set to or respectively. For and both and are zero because there is no struc- ture. When is enabled, the termio(7) definition of open/close is executed first before being passed to the master side. Note that while all opens are trapped, only the last close on a particular inode for a slave side is trapped by the A returns the external variable error if no or trap is pending. Accordingly, a that returns in response to a "exceptional condition" indicates that the trapped or request was terminated by a signal after returned. Identical to except when no or trap is pending. A blocks until a slave side or is trapped; whereas a returns Use when neither the pre- ferred method of a "exceptional condition" nor the master side is available. Complete the handshake started by a previous or The argument should point to the structure, as defined by the Before doing this request to complete the handshake, the server should set to an external variable error value to be passed back to the slave side. If there is no error, can be left alone because the initializes it to zero. Also, when there is no error, should be set if other than a zero result is desired. The server can set and if the trapped request is an and may set for a trapped if open error mode is enabled. Setting either or for a trapped affects neither the return value of the request nor the external variable value of the slave side. Setting either or for a trapped affects neither the return value of the request nor the external variable value of the slave side unless open error mode is enabled. Open error mode allows the server to return an error to a trapped slave by setting Unlike requests, setting never affects slave requests. Further, setting either or does not cause to return an error to the server. If the request is made and the request value in the passed structure does not equal the trapped value, the external variable is set and returned as is also returned if there are no trapped or requests. If the trapped request has been interrupted by a signal between the time that the server has done the and the the request returns Get the file status flags associated with a trapped request. Upon successful return, the returns in an integer referenced by arg the file status flags for the trapped request. The flag definitions in can be used to interpret the flags. If no trap is currently pending, the returns an error with the external variable set to Enable or disable read-only trapping of requests. trapping is enabled if the addressed by arg is nonzero and disabled if the addressed by arg is zero. By default, trapping is disabled. works in series with that is, the trapping must be enabled and must be enabled for requests to be trapped by trapping can be enabled or disabled regardless of the state of When is disabled, requests are not trapped by However, requests are trapped by if is disabled and is enabled. trapping allows the master side server to modify the parameters and return values of an request, whereas trapping does not. trapping allows the server on the master side to know when characteristics of the line discipline in the are changed by an application on its slave side. The mechanism for handshaking requests trapped by is the same as the mechanism described above for requests trapped by (It is recommended that requests be used on the master side to interrogate the configured state of the line discipline in the This compensates for the window of time before is enabled, when requests are not trapped.) When using on the master side of a the "exceptional condition" refers to an or request pending on the slave side, while "ready for reading or writing" indicates that the device can be read from or written to successfully. Of the requests subject to being trapped, only one-per-pty can be handled at a time. This means that when an application does a request to the slave side, all other requests to the same slave side are blocked until the first one is handshaked back by the master side. requests that are not trapped, such as when is enabled and is disabled, are not blocked.) This permits the implementation of indivisible operations by an call on the slave side that is passed to the server process. In summary, the following method of handling trapped and requests is preferred: 1. Call This system call blocks the master side until a slave side or request is trapped. 2. Make request. This step returns information about a trapped or request. If returns the external variable error loop back to the call. 3. Make request. This optional step is used if is nonzero and the server wants to do more than just reject the trapped slave request. 4. Make request. This optional step is done if is nonzero and the server wants to pass back a modified structure. It is done after the trapped request is processed via the server on the master side. 5. Set and If the trapped request is an set appropriately. If the appropriate value for is zero, must be set. If open error mode is enabled, set to a nonzero value to return an error to a trapped request. 6. Make request. This step completes the trapped or request. While a process is waiting in the slave side of the for the server to complete a handshake, it is susceptible to receiving signals. The following master side request allows the server process to control how the responds when a signal attempts to interrupt a trapped or request: Set the signal handling state of the to the mode specified as the argument. The mode can have three values, which are and Cause some signals to be postponed that are destined for the slave-side process whose or request is trapped. Signals are postponed if they would other- wise cause the process to jump to an installed signal handler. Signals are not postponed if they would otherwise cause the process to abort or if they are being ignored. When the server process completes the handshake by means of the request, the process returns to the calling program and any pending signals are then acted upon. Any signals that the user has blocked by means of continues to be blocked. Prevent a trapped or request from being restarted. The server process sets this mode when it wants the interrupted requests to return to the calling program with an error. This is the default mode of the If a signal interrupts a trapped or request, the user's signal handler routine can specify whether the request is to be restarted. If the request is restarted, it executes again from the beginning and the server has to make another request to start the handshake over again. If the user's signal handler routine specifies that the interrupted request should not be restarted, the request returns to the calling program with upon completion of the signal handler. Note that the restarted request is not necessarily the very next one to be trapped. The following requests, defined in provide a mechanism to get and set modes. Five of the modes can also be manipulated using other requests discussed previously. See the bit definitions for the equivalents. The effect of enabling or disabling them by either means is identical. Commonly, an application would use the to get the modes currently in effect, set or clear the bits for the modes being changed, and issue a to effect the desired change. Get the modes currently in effect. The returns in a long referenced by arg bits indicating the states of various modes. If a bit is set, the associated mode is enabled. If a bit is clear, the associated mode is disabled. Unused bits are clear. The meaning of the bits is described under the description of the Set the modes according to the value of type long referenced by arg. Unused bits are ignored but should be set to zero. The bit values for modes are listed below. Enable or disable remote mode. See the discussion of the Enable or disable tty mode. See the discussion of the Enable or disable packet mode. See the discussion of the Enable or disable trap mode. See the discussion of the Enable or disable monitor mode. See the discussion of the Enable or disable open error mode. Open error mode allows a server process to return an error to a trapped slave through the When open error mode is enabled, the server may return a trapped with an error by setting the field in the structure passed to the TIOCREQSET When open error mode is disabled (the default state), setting to handshake a slave has no effect. Note that unlike the trap handshaking, setting has no effect for a slave regardless of the state of open error mode. See the discussion of the for further details on handshaking a trapped request.WARNINGSThe slave side cannot indicate an end-of-file condition to the master side. When using a single request to the master side of greater than 256 bytes may result in multiple smaller records being read from the slave side instead of only one record.AUTHORwas developed by the University of California, Berkeley.FILESmaster pseudo terminals master pseudo terminals master pseudo terminals master pseudo terminals slave pseudo terminals slave pseudo terminals slave pseudo terminals slave pseudo terminalsSEE ALSOclose(2), fcntl(2), ioctl(2), open(2), read(2), select(2), sigblock(2), write(2), ptsname(3C), signal(5), termio(7). pty(7)
Similar Topics in the Unix Linux Community |
---|
Unable to view contents of a directory |
test file empty |
Printing empty subdirs before delete |
Dealing with Empty files, AWK and Loops |
Array Length Reports as Having Length when it is Empty? |