2000-04-24 11:55:14 +08:00
|
|
|
@node Low-Level Terminal Interface, Syslog, Sockets, Top
|
1998-07-13 20:29:13 +08:00
|
|
|
@c %MENU% How to change the characteristics of a terminal device
|
1995-02-18 09:27:10 +08:00
|
|
|
@chapter Low-Level Terminal Interface
|
|
|
|
|
|
|
|
This chapter describes functions that are specific to terminal devices.
|
|
|
|
You can use these functions to do things like turn off input echoing;
|
|
|
|
set serial line characteristics such as line speed and flow control; and
|
|
|
|
change which characters are used for end-of-file, command-line editing,
|
|
|
|
sending signals, and similar control functions.
|
|
|
|
|
|
|
|
Most of the functions in this chapter operate on file descriptors.
|
|
|
|
@xref{Low-Level I/O}, for more information about what a file
|
|
|
|
descriptor is and how to open a file descriptor for a terminal device.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Is It a Terminal:: How to determine if a file is a terminal
|
|
|
|
device, and what its name is.
|
|
|
|
* I/O Queues:: About flow control and typeahead.
|
|
|
|
* Canonical or Not:: Two basic styles of input processing.
|
|
|
|
* Terminal Modes:: How to examine and modify flags controlling
|
|
|
|
details of terminal I/O: echoing,
|
2000-05-01 01:56:00 +08:00
|
|
|
signals, editing. Posix.
|
|
|
|
* BSD Terminal Modes:: BSD compatible terminal mode setting
|
1995-02-18 09:27:10 +08:00
|
|
|
* Line Control:: Sending break sequences, clearing
|
1996-12-20 09:39:50 +08:00
|
|
|
terminal buffers @dots{}
|
1995-02-18 09:27:10 +08:00
|
|
|
* Noncanon Example:: How to read single characters without echo.
|
1998-06-23 01:08:51 +08:00
|
|
|
* Pseudo-Terminals:: How to open a pseudo-terminal.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Is It a Terminal
|
|
|
|
@section Identifying Terminals
|
|
|
|
@cindex terminal identification
|
|
|
|
@cindex identifying terminals
|
|
|
|
|
|
|
|
The functions described in this chapter only work on files that
|
|
|
|
correspond to terminal devices. You can find out whether a file
|
|
|
|
descriptor is associated with a terminal by using the @code{isatty}
|
|
|
|
function.
|
|
|
|
|
|
|
|
@pindex unistd.h
|
1998-06-23 01:08:51 +08:00
|
|
|
Prototypes for the functions in this section are declared in the header
|
|
|
|
file @file{unistd.h}.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@comment unistd.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int isatty (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c isatty ok
|
|
|
|
@c tcgetattr dup ok
|
1995-02-18 09:27:10 +08:00
|
|
|
This function returns @code{1} if @var{filedes} is a file descriptor
|
1998-06-23 01:08:51 +08:00
|
|
|
associated with an open terminal device, and @math{0} otherwise.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
If a file descriptor is associated with a terminal, you can get its
|
|
|
|
associated file name using the @code{ttyname} function. See also the
|
|
|
|
@code{ctermid} function, described in @ref{Identifying the Terminal}.
|
|
|
|
|
|
|
|
@comment unistd.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun {char *} ttyname (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
|
|
|
|
@c ttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
|
|
|
|
@c isatty dup ok
|
|
|
|
@c fstat dup ok
|
|
|
|
@c memcpy dup ok
|
|
|
|
@c getttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
|
|
|
|
@c opendir @ascuheap @acsmem @acsfd
|
|
|
|
@c readdir ok [protected by exclusive access]
|
|
|
|
@c strcmp dup ok
|
|
|
|
@c free dup @asulock @aculock @acsfd @acsmem
|
|
|
|
@c malloc dup @asulock @aculock @acsfd @acsmem
|
|
|
|
@c closedir @ascuheap @acsmem @acsfd
|
|
|
|
@c mempcpy dup ok
|
|
|
|
@c stat dup ok
|
1995-02-18 09:27:10 +08:00
|
|
|
If the file descriptor @var{filedes} is associated with a terminal
|
|
|
|
device, the @code{ttyname} function returns a pointer to a
|
|
|
|
statically-allocated, null-terminated string containing the file name of
|
|
|
|
the terminal file. The value is a null pointer if the file descriptor
|
|
|
|
isn't associated with a terminal, or the file name cannot be determined.
|
|
|
|
@end deftypefun
|
|
|
|
|
1998-06-23 01:08:51 +08:00
|
|
|
@comment unistd.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int ttyname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
|
|
|
|
@c ttyname_r @ascuheap @acsmem @acsfd
|
|
|
|
@c isatty dup ok
|
|
|
|
@c fstat dup ok
|
|
|
|
@c memcpy dup ok
|
|
|
|
@c getttyname_r @ascuheap @acsmem @acsfd
|
|
|
|
@c opendir @ascuheap @acsmem @acsfd
|
|
|
|
@c readdir ok [protected by exclusive access]
|
|
|
|
@c strcmp dup ok
|
|
|
|
@c closedir @ascuheap @acsmem @acsfd
|
|
|
|
@c stpncpy dup ok
|
|
|
|
@c stat dup ok
|
1998-06-23 01:08:51 +08:00
|
|
|
The @code{ttyname_r} function is similar to the @code{ttyname} function
|
|
|
|
except that it places its result into the user-specified buffer starting
|
|
|
|
at @var{buf} with length @var{len}.
|
|
|
|
|
|
|
|
The normal return value from @code{ttyname_r} is @math{0}. Otherwise an
|
|
|
|
error number is returned to indicate the error. The following
|
|
|
|
@code{errno} error conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} argument is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal.
|
|
|
|
|
|
|
|
@item ERANGE
|
|
|
|
The buffer length @var{len} is too small to store the string to be
|
|
|
|
returned.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
@node I/O Queues
|
|
|
|
@section I/O Queues
|
|
|
|
|
|
|
|
Many of the remaining functions in this section refer to the input and
|
|
|
|
output queues of a terminal device. These queues implement a form of
|
|
|
|
buffering @emph{within the kernel} independent of the buffering
|
|
|
|
implemented by I/O streams (@pxref{I/O on Streams}).
|
|
|
|
|
|
|
|
@cindex terminal input queue
|
|
|
|
@cindex typeahead buffer
|
|
|
|
The @dfn{terminal input queue} is also sometimes referred to as its
|
|
|
|
@dfn{typeahead buffer}. It holds the characters that have been received
|
|
|
|
from the terminal but not yet read by any process.
|
|
|
|
|
1998-03-19 22:32:08 +08:00
|
|
|
The size of the input queue is described by the @code{MAX_INPUT} and
|
|
|
|
@w{@code{_POSIX_MAX_INPUT}} parameters; see @ref{Limits for Files}. You
|
|
|
|
are guaranteed a queue size of at least @code{MAX_INPUT}, but the queue
|
|
|
|
might be larger, and might even dynamically change size. If input flow
|
|
|
|
control is enabled by setting the @code{IXOFF} input mode bit
|
|
|
|
(@pxref{Input Modes}), the terminal driver transmits STOP and START
|
|
|
|
characters to the terminal when necessary to prevent the queue from
|
|
|
|
overflowing. Otherwise, input may be lost if it comes in too fast from
|
|
|
|
the terminal. In canonical mode, all input stays in the queue until a
|
|
|
|
newline character is received, so the terminal input queue can fill up
|
|
|
|
when you type a very long line. @xref{Canonical or Not}.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@cindex terminal output queue
|
|
|
|
The @dfn{terminal output queue} is like the input queue, but for output;
|
|
|
|
it contains characters that have been written by processes, but not yet
|
|
|
|
transmitted to the terminal. If output flow control is enabled by
|
|
|
|
setting the @code{IXON} input mode bit (@pxref{Input Modes}), the
|
1998-05-20 00:24:41 +08:00
|
|
|
terminal driver obeys START and STOP characters sent by the terminal to
|
1995-02-18 09:27:10 +08:00
|
|
|
stop and restart transmission of output.
|
|
|
|
|
|
|
|
@dfn{Clearing} the terminal input queue means discarding any characters
|
|
|
|
that have been received but not yet read. Similarly, clearing the
|
|
|
|
terminal output queue means discarding any characters that have been
|
|
|
|
written but not yet transmitted.
|
|
|
|
|
|
|
|
@node Canonical or Not
|
|
|
|
@section Two Styles of Input: Canonical or Not
|
|
|
|
|
|
|
|
POSIX systems support two basic modes of input: canonical and
|
|
|
|
noncanonical.
|
|
|
|
|
|
|
|
@cindex canonical input processing
|
|
|
|
In @dfn{canonical input processing} mode, terminal input is processed in
|
|
|
|
lines terminated by newline (@code{'\n'}), EOF, or EOL characters. No
|
|
|
|
input can be read until an entire line has been typed by the user, and
|
|
|
|
the @code{read} function (@pxref{I/O Primitives}) returns at most a
|
|
|
|
single line of input, no matter how many bytes are requested.
|
|
|
|
|
|
|
|
In canonical input mode, the operating system provides input editing
|
|
|
|
facilities: some characters are interpreted specially to perform editing
|
|
|
|
operations within the current line of text, such as ERASE and KILL.
|
|
|
|
@xref{Editing Characters}.
|
|
|
|
|
|
|
|
The constants @code{_POSIX_MAX_CANON} and @code{MAX_CANON} parameterize
|
|
|
|
the maximum number of bytes which may appear in a single line of
|
|
|
|
canonical input. @xref{Limits for Files}. You are guaranteed a maximum
|
|
|
|
line length of at least @code{MAX_CANON} bytes, but the maximum might be
|
|
|
|
larger, and might even dynamically change size.
|
|
|
|
|
|
|
|
@cindex noncanonical input processing
|
|
|
|
In @dfn{noncanonical input processing} mode, characters are not grouped
|
|
|
|
into lines, and ERASE and KILL processing is not performed. The
|
|
|
|
granularity with which bytes are read in noncanonical input mode is
|
|
|
|
controlled by the MIN and TIME settings. @xref{Noncanonical Input}.
|
|
|
|
|
|
|
|
Most programs use canonical input mode, because this gives the user a
|
|
|
|
way to edit input line by line. The usual reason to use noncanonical
|
|
|
|
mode is when the program accepts single-character commands or provides
|
|
|
|
its own editing facilities.
|
|
|
|
|
|
|
|
The choice of canonical or noncanonical input is controlled by the
|
|
|
|
@code{ICANON} flag in the @code{c_lflag} member of @code{struct termios}.
|
|
|
|
@xref{Local Modes}.
|
|
|
|
|
|
|
|
@node Terminal Modes
|
|
|
|
@section Terminal Modes
|
|
|
|
|
|
|
|
@pindex termios.h
|
|
|
|
This section describes the various terminal attributes that control how
|
|
|
|
input and output are done. The functions, data structures, and symbolic
|
|
|
|
constants are all declared in the header file @file{termios.h}.
|
2000-05-01 01:56:00 +08:00
|
|
|
|
|
|
|
Don't confuse terminal attributes with file attributes. A device special
|
|
|
|
file which is associated with a terminal has file attributes as described
|
|
|
|
in @ref{File Attributes}. These are unrelated to the attributes of the
|
|
|
|
terminal device itself, which are discussed in this section.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@menu
|
|
|
|
* Mode Data Types:: The data type @code{struct termios} and
|
1996-12-20 09:39:50 +08:00
|
|
|
related types.
|
1995-02-18 09:27:10 +08:00
|
|
|
* Mode Functions:: Functions to read and set the terminal
|
1996-12-20 09:39:50 +08:00
|
|
|
attributes.
|
1995-02-18 09:27:10 +08:00
|
|
|
* Setting Modes:: The right way to set terminal attributes
|
|
|
|
reliably.
|
|
|
|
* Input Modes:: Flags controlling low-level input handling.
|
|
|
|
* Output Modes:: Flags controlling low-level output handling.
|
|
|
|
* Control Modes:: Flags controlling serial port behavior.
|
|
|
|
* Local Modes:: Flags controlling high-level input handling.
|
|
|
|
* Line Speed:: How to read and set the terminal line speed.
|
|
|
|
* Special Characters:: Characters that have special effects,
|
|
|
|
and how to change them.
|
|
|
|
* Noncanonical Input:: Controlling how long to wait for input.
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Mode Data Types
|
|
|
|
@subsection Terminal Mode Data Types
|
|
|
|
@cindex terminal mode data types
|
|
|
|
|
|
|
|
The entire collection of attributes of a terminal is stored in a
|
|
|
|
structure of type @code{struct termios}. This structure is used
|
|
|
|
with the functions @code{tcgetattr} and @code{tcsetattr} to read
|
|
|
|
and set the attributes.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftp {Data Type} {struct termios}
|
2016-10-06 14:37:28 +08:00
|
|
|
A @code{struct termios} records all the I/O attributes of a terminal. The
|
1995-02-18 09:27:10 +08:00
|
|
|
structure includes at least the following members:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item tcflag_t c_iflag
|
|
|
|
A bit mask specifying flags for input modes; see @ref{Input Modes}.
|
|
|
|
|
|
|
|
@item tcflag_t c_oflag
|
|
|
|
A bit mask specifying flags for output modes; see @ref{Output Modes}.
|
|
|
|
|
|
|
|
@item tcflag_t c_cflag
|
|
|
|
A bit mask specifying flags for control modes; see @ref{Control Modes}.
|
|
|
|
|
|
|
|
@item tcflag_t c_lflag
|
|
|
|
A bit mask specifying flags for local modes; see @ref{Local Modes}.
|
|
|
|
|
|
|
|
@item cc_t c_cc[NCCS]
|
|
|
|
An array specifying which characters are associated with various
|
|
|
|
control functions; see @ref{Special Characters}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
The @code{struct termios} structure also contains members which
|
|
|
|
encode input and output transmission speeds, but the representation is
|
|
|
|
not specified. @xref{Line Speed}, for how to examine and store the
|
|
|
|
speed values.
|
|
|
|
@end deftp
|
|
|
|
|
|
|
|
The following sections describe the details of the members of the
|
|
|
|
@code{struct termios} structure.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftp {Data Type} tcflag_t
|
|
|
|
This is an unsigned integer type used to represent the various
|
|
|
|
bit masks for terminal flags.
|
|
|
|
@end deftp
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftp {Data Type} cc_t
|
|
|
|
This is an unsigned integer type used to represent characters associated
|
|
|
|
with various terminal control functions.
|
|
|
|
@end deftp
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int NCCS
|
|
|
|
The value of this macro is the number of elements in the @code{c_cc}
|
|
|
|
array.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Mode Functions
|
|
|
|
@subsection Terminal Mode Functions
|
|
|
|
@cindex terminal mode functions
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcgetattr (int @var{filedes}, struct termios *@var{termios-p})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Converting the kernel-returned termios data structure to the userland
|
|
|
|
@c format does not ensure atomic or consistent writing.
|
1995-02-18 09:27:10 +08:00
|
|
|
This function is used to examine the attributes of the terminal
|
|
|
|
device with file descriptor @var{filedes}. The attributes are returned
|
|
|
|
in the structure that @var{termios-p} points to.
|
|
|
|
|
1998-06-23 01:08:51 +08:00
|
|
|
If successful, @code{tcgetattr} returns @math{0}. A return value of @math{-1}
|
1995-02-18 09:27:10 +08:00
|
|
|
indicates an error. The following @code{errno} error conditions are
|
|
|
|
defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} argument is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcsetattr (int @var{filedes}, int @var{when}, const struct termios *@var{termios-p})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Converting the incoming termios data structure to the kernel format
|
|
|
|
@c does not ensure atomic or consistent reading.
|
1995-02-18 09:27:10 +08:00
|
|
|
This function sets the attributes of the terminal device with file
|
|
|
|
descriptor @var{filedes}. The new attributes are taken from the
|
|
|
|
structure that @var{termios-p} points to.
|
|
|
|
|
|
|
|
The @var{when} argument specifies how to deal with input and output
|
|
|
|
already queued. It can be one of the following values:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@item TCSANOW
|
|
|
|
@vindex TCSANOW
|
|
|
|
Make the change immediately.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@item TCSADRAIN
|
|
|
|
@vindex TCSADRAIN
|
|
|
|
Make the change after waiting until all queued output has been written.
|
|
|
|
You should usually use this option when changing parameters that affect
|
|
|
|
output.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@item TCSAFLUSH
|
|
|
|
@vindex TCSAFLUSH
|
|
|
|
This is like @code{TCSADRAIN}, but also discards any queued input.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@item TCSASOFT
|
|
|
|
@vindex TCSASOFT
|
|
|
|
This is a flag bit that you can add to any of the above alternatives.
|
|
|
|
Its meaning is to inhibit alteration of the state of the terminal
|
|
|
|
hardware. It is a BSD extension; it is only supported on BSD systems
|
2012-03-08 09:27:38 +08:00
|
|
|
and @gnuhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
Using @code{TCSASOFT} is exactly the same as setting the @code{CIGNORE}
|
|
|
|
bit in the @code{c_cflag} member of the structure @var{termios-p} points
|
|
|
|
to. @xref{Control Modes}, for a description of @code{CIGNORE}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
If this function is called from a background process on its controlling
|
|
|
|
terminal, normally all processes in the process group are sent a
|
|
|
|
@code{SIGTTOU} signal, in the same way as if the process were trying to
|
|
|
|
write to the terminal. The exception is if the calling process itself
|
|
|
|
is ignoring or blocking @code{SIGTTOU} signals, in which case the
|
|
|
|
operation is performed and no signal is sent. @xref{Job Control}.
|
|
|
|
|
1998-06-23 01:08:51 +08:00
|
|
|
If successful, @code{tcsetattr} returns @math{0}. A return value of
|
|
|
|
@math{-1} indicates an error. The following @code{errno} error
|
1995-02-18 09:27:10 +08:00
|
|
|
conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} argument is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal.
|
|
|
|
|
|
|
|
@item EINVAL
|
|
|
|
Either the value of the @code{when} argument is not valid, or there is
|
|
|
|
something wrong with the data in the @var{termios-p} argument.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
Although @code{tcgetattr} and @code{tcsetattr} specify the terminal
|
|
|
|
device with a file descriptor, the attributes are those of the terminal
|
|
|
|
device itself and not of the file descriptor. This means that the
|
|
|
|
effects of changing terminal attributes are persistent; if another
|
|
|
|
process opens the terminal file later on, it will see the changed
|
|
|
|
attributes even though it doesn't have anything to do with the open file
|
|
|
|
descriptor you originally specified in changing the attributes.
|
|
|
|
|
|
|
|
Similarly, if a single process has multiple or duplicated file
|
|
|
|
descriptors for the same terminal device, changing the terminal
|
|
|
|
attributes affects input and output to all of these file
|
|
|
|
descriptors. This means, for example, that you can't open one file
|
|
|
|
descriptor or stream to read from a terminal in the normal
|
|
|
|
line-buffered, echoed mode; and simultaneously have another file
|
|
|
|
descriptor for the same terminal that you use to read from it in
|
|
|
|
single-character, non-echoed mode. Instead, you have to explicitly
|
|
|
|
switch the terminal back and forth between the two modes.
|
|
|
|
|
|
|
|
@node Setting Modes
|
|
|
|
@subsection Setting Terminal Modes Properly
|
|
|
|
|
|
|
|
When you set terminal modes, you should call @code{tcgetattr} first to
|
|
|
|
get the current modes of the particular terminal device, modify only
|
|
|
|
those modes that you are really interested in, and store the result with
|
|
|
|
@code{tcsetattr}.
|
|
|
|
|
|
|
|
It's a bad idea to simply initialize a @code{struct termios} structure
|
|
|
|
to a chosen set of attributes and pass it directly to @code{tcsetattr}.
|
|
|
|
Your program may be run years from now, on systems that support members
|
|
|
|
not documented in this manual. The way to avoid setting these members
|
|
|
|
to unreasonable values is to avoid changing them.
|
|
|
|
|
|
|
|
What's more, different terminal devices may require different mode
|
|
|
|
settings in order to function properly. So you should avoid blindly
|
|
|
|
copying attributes from one terminal device to another.
|
|
|
|
|
|
|
|
When a member contains a collection of independent flags, as the
|
|
|
|
@code{c_iflag}, @code{c_oflag} and @code{c_cflag} members do, even
|
|
|
|
setting the entire member is a bad idea, because particular operating
|
|
|
|
systems have their own flags. Instead, you should start with the
|
|
|
|
current value of the member and alter only the flags whose values matter
|
|
|
|
in your program, leaving any other flags unchanged.
|
|
|
|
|
|
|
|
Here is an example of how to set one flag (@code{ISTRIP}) in the
|
|
|
|
@code{struct termios} structure while properly preserving all the other
|
|
|
|
data in the structure:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
@group
|
|
|
|
int
|
|
|
|
set_istrip (int desc, int value)
|
|
|
|
@{
|
|
|
|
struct termios settings;
|
|
|
|
int result;
|
|
|
|
@end group
|
|
|
|
|
|
|
|
@group
|
|
|
|
result = tcgetattr (desc, &settings);
|
|
|
|
if (result < 0)
|
|
|
|
@{
|
|
|
|
perror ("error in tcgetattr");
|
|
|
|
return 0;
|
|
|
|
@}
|
|
|
|
@end group
|
|
|
|
@group
|
|
|
|
settings.c_iflag &= ~ISTRIP;
|
|
|
|
if (value)
|
|
|
|
settings.c_iflag |= ISTRIP;
|
|
|
|
@end group
|
|
|
|
@group
|
|
|
|
result = tcsetattr (desc, TCSANOW, &settings);
|
|
|
|
if (result < 0)
|
|
|
|
@{
|
2002-10-11 01:50:16 +08:00
|
|
|
perror ("error in tcsetattr");
|
|
|
|
return 0;
|
1995-02-18 09:27:10 +08:00
|
|
|
@}
|
|
|
|
return 1;
|
|
|
|
@}
|
|
|
|
@end group
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@node Input Modes
|
|
|
|
@subsection Input Modes
|
|
|
|
|
|
|
|
This section describes the terminal attribute flags that control
|
|
|
|
fairly low-level aspects of input processing: handling of parity errors,
|
|
|
|
break signals, flow control, and @key{RET} and @key{LFD} characters.
|
|
|
|
|
|
|
|
All of these flags are bits in the @code{c_iflag} member of the
|
|
|
|
@code{struct termios} structure. The member is an integer, and you
|
|
|
|
change flags using the operators @code{&}, @code{|} and @code{^}. Don't
|
|
|
|
try to specify the entire value for @code{c_iflag}---instead, change
|
|
|
|
only specific flags and leave the rest untouched (@pxref{Setting
|
|
|
|
Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t INPCK
|
|
|
|
@cindex parity checking
|
|
|
|
If this bit is set, input parity checking is enabled. If it is not set,
|
|
|
|
no checking at all is done for parity errors on input; the
|
|
|
|
characters are simply passed through to the application.
|
|
|
|
|
|
|
|
Parity checking on input processing is independent of whether parity
|
|
|
|
detection and generation on the underlying terminal hardware is enabled;
|
|
|
|
see @ref{Control Modes}. For example, you could clear the @code{INPCK}
|
|
|
|
input mode flag and set the @code{PARENB} control mode flag to ignore
|
|
|
|
parity errors on input, but still generate parity on output.
|
|
|
|
|
|
|
|
If this bit is set, what happens when a parity error is detected depends
|
|
|
|
on whether the @code{IGNPAR} or @code{PARMRK} bits are set. If neither
|
|
|
|
of these bits are set, a byte with a parity error is passed to the
|
|
|
|
application as a @code{'\0'} character.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IGNPAR
|
|
|
|
If this bit is set, any byte with a framing or parity error is ignored.
|
|
|
|
This is only useful if @code{INPCK} is also set.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t PARMRK
|
|
|
|
If this bit is set, input bytes with parity or framing errors are marked
|
|
|
|
when passed to the program. This bit is meaningful only when
|
|
|
|
@code{INPCK} is set and @code{IGNPAR} is not set.
|
|
|
|
|
|
|
|
The way erroneous bytes are marked is with two preceding bytes,
|
|
|
|
@code{377} and @code{0}. Thus, the program actually reads three bytes
|
|
|
|
for one erroneous byte received from the terminal.
|
|
|
|
|
|
|
|
If a valid byte has the value @code{0377}, and @code{ISTRIP} (see below)
|
|
|
|
is not set, the program might confuse it with the prefix that marks a
|
|
|
|
parity error. So a valid byte @code{0377} is passed to the program as
|
|
|
|
two bytes, @code{0377} @code{0377}, in this case.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ISTRIP
|
|
|
|
If this bit is set, valid input bytes are stripped to seven bits;
|
|
|
|
otherwise, all eight bits are available for programs to read.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IGNBRK
|
|
|
|
If this bit is set, break conditions are ignored.
|
|
|
|
|
|
|
|
@cindex break condition, detecting
|
|
|
|
A @dfn{break condition} is defined in the context of asynchronous
|
|
|
|
serial data transmission as a series of zero-value bits longer than a
|
|
|
|
single byte.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t BRKINT
|
|
|
|
If this bit is set and @code{IGNBRK} is not set, a break condition
|
|
|
|
clears the terminal input and output queues and raises a @code{SIGINT}
|
|
|
|
signal for the foreground process group associated with the terminal.
|
|
|
|
|
|
|
|
If neither @code{BRKINT} nor @code{IGNBRK} are set, a break condition is
|
|
|
|
passed to the application as a single @code{'\0'} character if
|
1996-12-20 09:39:50 +08:00
|
|
|
@code{PARMRK} is not set, or otherwise as a three-character sequence
|
1995-02-18 09:27:10 +08:00
|
|
|
@code{'\377'}, @code{'\0'}, @code{'\0'}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IGNCR
|
|
|
|
If this bit is set, carriage return characters (@code{'\r'}) are
|
|
|
|
discarded on input. Discarding carriage return may be useful on
|
|
|
|
terminals that send both carriage return and linefeed when you type the
|
|
|
|
@key{RET} key.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ICRNL
|
|
|
|
If this bit is set and @code{IGNCR} is not set, carriage return characters
|
|
|
|
(@code{'\r'}) received as input are passed to the application as newline
|
|
|
|
characters (@code{'\n'}).
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t INLCR
|
|
|
|
If this bit is set, newline characters (@code{'\n'}) received as input
|
|
|
|
are passed to the application as carriage return characters (@code{'\r'}).
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IXOFF
|
|
|
|
If this bit is set, start/stop control on input is enabled. In other
|
|
|
|
words, the computer sends STOP and START characters as necessary to
|
|
|
|
prevent input from coming in faster than programs are reading it. The
|
|
|
|
idea is that the actual terminal hardware that is generating the input
|
|
|
|
data responds to a STOP character by suspending transmission, and to a
|
|
|
|
START character by resuming transmission. @xref{Start/Stop Characters}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IXON
|
|
|
|
If this bit is set, start/stop control on output is enabled. In other
|
|
|
|
words, if the computer receives a STOP character, it suspends output
|
|
|
|
until a START character is received. In this case, the STOP and START
|
|
|
|
characters are never passed to the application program. If this bit is
|
|
|
|
not set, then START and STOP can be read as ordinary characters.
|
|
|
|
@xref{Start/Stop Characters}.
|
|
|
|
@c !!! mention this interferes with using C-s and C-q for programs like emacs
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t IXANY
|
|
|
|
If this bit is set, any input character restarts output when output has
|
|
|
|
been suspended with the STOP character. Otherwise, only the START
|
|
|
|
character restarts output.
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
This is a BSD extension; it exists only on BSD systems and
|
|
|
|
@gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t IMAXBEL
|
|
|
|
If this bit is set, then filling up the terminal input buffer sends a
|
|
|
|
BEL character (code @code{007}) to the terminal to ring the bell.
|
|
|
|
|
|
|
|
This is a BSD extension.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Output Modes
|
|
|
|
@subsection Output Modes
|
|
|
|
|
|
|
|
This section describes the terminal flags and fields that control how
|
|
|
|
output characters are translated and padded for display. All of these
|
|
|
|
are contained in the @code{c_oflag} member of the @w{@code{struct termios}}
|
|
|
|
structure.
|
|
|
|
|
|
|
|
The @code{c_oflag} member itself is an integer, and you change the flags
|
|
|
|
and fields using the operators @code{&}, @code{|}, and @code{^}. Don't
|
|
|
|
try to specify the entire value for @code{c_oflag}---instead, change
|
|
|
|
only specific flags and leave the rest untouched (@pxref{Setting
|
|
|
|
Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t OPOST
|
|
|
|
If this bit is set, output data is processed in some unspecified way so
|
|
|
|
that it is displayed appropriately on the terminal device. This
|
|
|
|
typically includes mapping newline characters (@code{'\n'}) onto
|
|
|
|
carriage return and linefeed pairs.
|
|
|
|
|
|
|
|
If this bit isn't set, the characters are transmitted as-is.
|
|
|
|
@end deftypevr
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
The following three bits are effective only if @code{OPOST} is set.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@comment termios.h
|
2012-03-08 09:27:38 +08:00
|
|
|
@comment POSIX.1
|
1995-02-18 09:27:10 +08:00
|
|
|
@deftypevr Macro tcflag_t ONLCR
|
|
|
|
If this bit is set, convert the newline character on output into a pair
|
|
|
|
of characters, carriage return followed by linefeed.
|
|
|
|
@end deftypevr
|
|
|
|
|
2013-02-12 06:12:47 +08:00
|
|
|
@comment termios.h (optional)
|
1995-02-18 09:27:10 +08:00
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t OXTABS
|
|
|
|
If this bit is set, convert tab characters on output into the appropriate
|
2012-03-08 09:27:38 +08:00
|
|
|
number of spaces to emulate a tab stop every eight columns. This bit
|
|
|
|
exists only on BSD systems and @gnuhurdsystems{}; on
|
|
|
|
@gnulinuxsystems{} it is available as @code{XTABS}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
2013-02-12 06:12:47 +08:00
|
|
|
@comment termios.h (optional)
|
1995-02-18 09:27:10 +08:00
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t ONOEOT
|
|
|
|
If this bit is set, discard @kbd{C-d} characters (code @code{004}) on
|
|
|
|
output. These characters cause many dial-up terminals to disconnect.
|
2012-03-08 09:27:38 +08:00
|
|
|
This bit exists only on BSD systems and @gnuhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Control Modes
|
|
|
|
@subsection Control Modes
|
|
|
|
|
|
|
|
This section describes the terminal flags and fields that control
|
|
|
|
parameters usually associated with asynchronous serial data
|
|
|
|
transmission. These flags may not make sense for other kinds of
|
|
|
|
terminal ports (such as a network connection pseudo-terminal). All of
|
|
|
|
these are contained in the @code{c_cflag} member of the @code{struct
|
|
|
|
termios} structure.
|
|
|
|
|
|
|
|
The @code{c_cflag} member itself is an integer, and you change the flags
|
|
|
|
and fields using the operators @code{&}, @code{|}, and @code{^}. Don't
|
|
|
|
try to specify the entire value for @code{c_cflag}---instead, change
|
|
|
|
only specific flags and leave the rest untouched (@pxref{Setting
|
|
|
|
Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CLOCAL
|
|
|
|
If this bit is set, it indicates that the terminal is connected
|
|
|
|
``locally'' and that the modem status lines (such as carrier detect)
|
|
|
|
should be ignored.
|
|
|
|
@cindex modem status lines
|
|
|
|
@cindex carrier detect
|
|
|
|
|
|
|
|
On many systems if this bit is not set and you call @code{open} without
|
|
|
|
the @code{O_NONBLOCK} flag set, @code{open} blocks until a modem
|
|
|
|
connection is established.
|
|
|
|
|
|
|
|
If this bit is not set and a modem disconnect is detected, a
|
|
|
|
@code{SIGHUP} signal is sent to the controlling process group for the
|
|
|
|
terminal (if it has one). Normally, this causes the process to exit;
|
|
|
|
see @ref{Signal Handling}. Reading from the terminal after a disconnect
|
|
|
|
causes an end-of-file condition, and writing causes an @code{EIO} error
|
|
|
|
to be returned. The terminal device must be closed and reopened to
|
|
|
|
clear the condition.
|
|
|
|
@cindex modem disconnect
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t HUPCL
|
|
|
|
If this bit is set, a modem disconnect is generated when all processes
|
|
|
|
that have the terminal device open have either closed the file or exited.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CREAD
|
|
|
|
If this bit is set, input can be read from the terminal. Otherwise,
|
|
|
|
input is discarded when it arrives.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CSTOPB
|
|
|
|
If this bit is set, two stop bits are used. Otherwise, only one stop bit
|
|
|
|
is used.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t PARENB
|
|
|
|
If this bit is set, generation and detection of a parity bit are enabled.
|
|
|
|
@xref{Input Modes}, for information on how input parity errors are handled.
|
|
|
|
|
|
|
|
If this bit is not set, no parity bit is added to output characters, and
|
|
|
|
input characters are not checked for correct parity.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t PARODD
|
|
|
|
This bit is only useful if @code{PARENB} is set. If @code{PARODD} is set,
|
|
|
|
odd parity is used, otherwise even parity is used.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
The control mode flags also includes a field for the number of bits per
|
|
|
|
character. You can use the @code{CSIZE} macro as a mask to extract the
|
|
|
|
value, like this: @code{settings.c_cflag & CSIZE}.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CSIZE
|
|
|
|
This is a mask for the number of bits per character.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CS5
|
|
|
|
This specifies five bits per byte.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CS6
|
|
|
|
This specifies six bits per byte.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CS7
|
|
|
|
This specifies seven bits per byte.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t CS8
|
|
|
|
This specifies eight bits per byte.
|
|
|
|
@end deftypevr
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
The following four bits are BSD extensions; these exist only on BSD
|
|
|
|
systems and @gnuhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t CCTS_OFLOW
|
|
|
|
If this bit is set, enable flow control of output based on the CTS wire
|
|
|
|
(RS232 protocol).
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t CRTS_IFLOW
|
|
|
|
If this bit is set, enable flow control of input based on the RTS wire
|
|
|
|
(RS232 protocol).
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t MDMBUF
|
|
|
|
If this bit is set, enable carrier-based flow control of output.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t CIGNORE
|
|
|
|
If this bit is set, it says to ignore the control modes and line speed
|
|
|
|
values entirely. This is only meaningful in a call to @code{tcsetattr}.
|
|
|
|
|
|
|
|
The @code{c_cflag} member and the line speed values returned by
|
|
|
|
@code{cfgetispeed} and @code{cfgetospeed} will be unaffected by the
|
|
|
|
call. @code{CIGNORE} is useful if you want to set all the software
|
|
|
|
modes in the other members, but leave the hardware details in
|
|
|
|
@code{c_cflag} unchanged. (This is how the @code{TCSASOFT} flag to
|
|
|
|
@code{tcsettattr} works.)
|
|
|
|
|
|
|
|
This bit is never set in the structure filled in by @code{tcgetattr}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Local Modes
|
|
|
|
@subsection Local Modes
|
|
|
|
|
|
|
|
This section describes the flags for the @code{c_lflag} member of the
|
|
|
|
@code{struct termios} structure. These flags generally control
|
|
|
|
higher-level aspects of input processing than the input modes flags
|
|
|
|
described in @ref{Input Modes}, such as echoing, signals, and the choice
|
|
|
|
of canonical or noncanonical input.
|
|
|
|
|
|
|
|
The @code{c_lflag} member itself is an integer, and you change the flags
|
|
|
|
and fields using the operators @code{&}, @code{|}, and @code{^}. Don't
|
|
|
|
try to specify the entire value for @code{c_lflag}---instead, change
|
|
|
|
only specific flags and leave the rest untouched (@pxref{Setting
|
|
|
|
Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ICANON
|
|
|
|
This bit, if set, enables canonical input processing mode. Otherwise,
|
|
|
|
input is processed in noncanonical mode. @xref{Canonical or Not}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ECHO
|
|
|
|
If this bit is set, echoing of input characters back to the terminal
|
|
|
|
is enabled.
|
|
|
|
@cindex echo of terminal input
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ECHOE
|
|
|
|
If this bit is set, echoing indicates erasure of input with the ERASE
|
|
|
|
character by erasing the last character in the current line from the
|
|
|
|
screen. Otherwise, the character erased is re-echoed to show what has
|
|
|
|
happened (suitable for a printing terminal).
|
|
|
|
|
|
|
|
This bit only controls the display behavior; the @code{ICANON} bit by
|
|
|
|
itself controls actual recognition of the ERASE character and erasure of
|
|
|
|
input, without which @code{ECHOE} is simply irrelevant.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t ECHOPRT
|
2016-10-06 14:37:28 +08:00
|
|
|
This bit, like @code{ECHOE}, enables display of the ERASE character in
|
1995-02-18 09:27:10 +08:00
|
|
|
a way that is geared to a hardcopy terminal. When you type the ERASE
|
|
|
|
character, a @samp{\} character is printed followed by the first
|
|
|
|
character erased. Typing the ERASE character again just prints the next
|
|
|
|
character erased. Then, the next time you type a normal character, a
|
|
|
|
@samp{/} character is printed before the character echoes.
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
This is a BSD extension, and exists only in BSD systems and
|
|
|
|
@gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ECHOK
|
|
|
|
This bit enables special display of the KILL character by moving to a
|
|
|
|
new line after echoing the KILL character normally. The behavior of
|
|
|
|
@code{ECHOKE} (below) is nicer to look at.
|
|
|
|
|
|
|
|
If this bit is not set, the KILL character echoes just as it would if it
|
|
|
|
were not the KILL character. Then it is up to the user to remember that
|
|
|
|
the KILL character has erased the preceding input; there is no
|
|
|
|
indication of this on the screen.
|
|
|
|
|
|
|
|
This bit only controls the display behavior; the @code{ICANON} bit by
|
|
|
|
itself controls actual recognition of the KILL character and erasure of
|
|
|
|
input, without which @code{ECHOK} is simply irrelevant.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t ECHOKE
|
|
|
|
This bit is similar to @code{ECHOK}. It enables special display of the
|
|
|
|
KILL character by erasing on the screen the entire line that has been
|
2012-03-08 09:27:38 +08:00
|
|
|
killed. This is a BSD extension, and exists only in BSD systems and
|
|
|
|
@gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ECHONL
|
|
|
|
If this bit is set and the @code{ICANON} bit is also set, then the
|
|
|
|
newline (@code{'\n'}) character is echoed even if the @code{ECHO} bit
|
|
|
|
is not set.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t ECHOCTL
|
|
|
|
If this bit is set and the @code{ECHO} bit is also set, echo control
|
|
|
|
characters with @samp{^} followed by the corresponding text character.
|
|
|
|
Thus, control-A echoes as @samp{^A}. This is usually the preferred mode
|
|
|
|
for interactive input, because echoing a control character back to the
|
|
|
|
terminal could have some undesired effect on the terminal.
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
This is a BSD extension, and exists only in BSD systems and
|
|
|
|
@gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t ISIG
|
|
|
|
This bit controls whether the INTR, QUIT, and SUSP characters are
|
|
|
|
recognized. The functions associated with these characters are performed
|
|
|
|
if and only if this bit is set. Being in canonical or noncanonical
|
2016-10-06 14:37:28 +08:00
|
|
|
input mode has no effect on the interpretation of these characters.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
You should use caution when disabling recognition of these characters.
|
|
|
|
Programs that cannot be interrupted interactively are very
|
|
|
|
user-unfriendly. If you clear this bit, your program should provide
|
|
|
|
some alternate interface that allows the user to interactively send the
|
|
|
|
signals associated with these characters, or to escape from the program.
|
|
|
|
@cindex interactive signals, from terminal
|
|
|
|
|
|
|
|
@xref{Signal Characters}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t IEXTEN
|
|
|
|
POSIX.1 gives @code{IEXTEN} implementation-defined meaning,
|
|
|
|
so you cannot rely on this interpretation on all systems.
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
On BSD systems and @gnulinuxhurdsystems{}, it enables the LNEXT and
|
|
|
|
DISCARD characters.
|
1995-02-18 09:27:10 +08:00
|
|
|
@xref{Other Special}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t NOFLSH
|
|
|
|
Normally, the INTR, QUIT, and SUSP characters cause input and output
|
|
|
|
queues for the terminal to be cleared. If this bit is set, the queues
|
|
|
|
are not cleared.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro tcflag_t TOSTOP
|
|
|
|
If this bit is set and the system supports job control, then
|
|
|
|
@code{SIGTTOU} signals are generated by background processes that
|
|
|
|
attempt to write to the terminal. @xref{Access to the Terminal}.
|
|
|
|
@end deftypevr
|
|
|
|
|
2012-03-08 09:27:38 +08:00
|
|
|
The following bits are BSD extensions; they exist only on BSD systems
|
|
|
|
and @gnuhurdsystems{}.
|
1996-12-20 09:39:50 +08:00
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t ALTWERASE
|
|
|
|
This bit determines how far the WERASE character should erase. The
|
|
|
|
WERASE character erases back to the beginning of a word; the question
|
|
|
|
is, where do words begin?
|
|
|
|
|
|
|
|
If this bit is clear, then the beginning of a word is a nonwhitespace
|
|
|
|
character following a whitespace character. If the bit is set, then the
|
|
|
|
beginning of a word is an alphanumeric character or underscore following
|
|
|
|
a character which is none of those.
|
|
|
|
|
|
|
|
@xref{Editing Characters}, for more information about the WERASE character.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t FLUSHO
|
|
|
|
This is the bit that toggles when the user types the DISCARD character.
|
|
|
|
While this bit is set, all output is discarded. @xref{Other Special}.
|
|
|
|
@end deftypevr
|
|
|
|
|
2013-02-12 06:12:47 +08:00
|
|
|
@comment termios.h (optional)
|
1995-02-18 09:27:10 +08:00
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t NOKERNINFO
|
|
|
|
Setting this bit disables handling of the STATUS character.
|
|
|
|
@xref{Other Special}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro tcflag_t PENDIN
|
|
|
|
If this bit is set, it indicates that there is a line of input that
|
|
|
|
needs to be reprinted. Typing the REPRINT character sets this bit; the
|
|
|
|
bit remains set until reprinting is finished. @xref{Editing Characters}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@c EXTPROC is too obscure to document now. --roland
|
|
|
|
|
|
|
|
@node Line Speed
|
|
|
|
@subsection Line Speed
|
|
|
|
@cindex line speed
|
|
|
|
@cindex baud rate
|
|
|
|
@cindex terminal line speed
|
|
|
|
@cindex terminal line speed
|
|
|
|
|
|
|
|
The terminal line speed tells the computer how fast to read and write
|
|
|
|
data on the terminal.
|
|
|
|
|
|
|
|
If the terminal is connected to a real serial line, the terminal speed
|
|
|
|
you specify actually controls the line---if it doesn't match the
|
|
|
|
terminal's own idea of the speed, communication does not work. Real
|
|
|
|
serial ports accept only certain standard speeds. Also, particular
|
|
|
|
hardware may not support even all the standard speeds. Specifying a
|
|
|
|
speed of zero hangs up a dialup connection and turns off modem control
|
|
|
|
signals.
|
|
|
|
|
|
|
|
If the terminal is not a real serial line (for example, if it is a
|
|
|
|
network connection), then the line speed won't really affect data
|
|
|
|
transmission speed, but some programs will use it to determine the
|
|
|
|
amount of padding needed. It's best to specify a line speed value that
|
|
|
|
matches the actual speed of the actual terminal, but you can safely
|
|
|
|
experiment with different values to vary the amount of padding.
|
|
|
|
|
|
|
|
There are actually two line speeds for each terminal, one for input and
|
|
|
|
one for output. You can set them independently, but most often
|
|
|
|
terminals use the same speed for both directions.
|
|
|
|
|
|
|
|
The speed values are stored in the @code{struct termios} structure, but
|
|
|
|
don't try to access them in the @code{struct termios} structure
|
|
|
|
directly. Instead, you should use the following functions to read and
|
|
|
|
store them:
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun speed_t cfgetospeed (const struct termios *@var{termios-p})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Direct access to a single termios field, except on Linux, where
|
|
|
|
@c multiple accesses may take place. No worries either way, callers
|
|
|
|
@c must ensure mutual exclusion on such non-opaque types.
|
1995-02-18 09:27:10 +08:00
|
|
|
This function returns the output line speed stored in the structure
|
|
|
|
@code{*@var{termios-p}}.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun speed_t cfgetispeed (const struct termios *@var{termios-p})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
1995-02-18 09:27:10 +08:00
|
|
|
This function returns the input line speed stored in the structure
|
|
|
|
@code{*@var{termios-p}}.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int cfsetospeed (struct termios *@var{termios-p}, speed_t @var{speed})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
1995-02-18 09:27:10 +08:00
|
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as the output
|
1998-06-23 01:08:51 +08:00
|
|
|
speed. The normal return value is @math{0}; a value of @math{-1}
|
1995-02-18 09:27:10 +08:00
|
|
|
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed}
|
1998-06-23 01:08:51 +08:00
|
|
|
returns @math{-1}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int cfsetispeed (struct termios *@var{termios-p}, speed_t @var{speed})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
1995-02-18 09:27:10 +08:00
|
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as the input
|
1998-06-23 01:08:51 +08:00
|
|
|
speed. The normal return value is @math{0}; a value of @math{-1}
|
1995-02-18 09:27:10 +08:00
|
|
|
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed}
|
1998-06-23 01:08:51 +08:00
|
|
|
returns @math{-1}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypefun int cfsetspeed (struct termios *@var{termios-p}, speed_t @var{speed})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c There's no guarantee that the two calls are atomic, but since this is
|
|
|
|
@c not an opaque type, callers ought to ensure mutual exclusion to the
|
|
|
|
@c termios object.
|
|
|
|
|
|
|
|
@c cfsetspeed ok
|
|
|
|
@c cfsetispeed ok
|
|
|
|
@c cfsetospeed ok
|
1995-02-18 09:27:10 +08:00
|
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as both the
|
1998-06-23 01:08:51 +08:00
|
|
|
input and output speeds. The normal return value is @math{0}; a value
|
|
|
|
of @math{-1} indicates an error. If @var{speed} is not a speed,
|
|
|
|
@code{cfsetspeed} returns @math{-1}. This function is an extension in
|
1995-02-18 09:27:10 +08:00
|
|
|
4.4 BSD.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftp {Data Type} speed_t
|
|
|
|
The @code{speed_t} type is an unsigned integer data type used to
|
|
|
|
represent line speeds.
|
|
|
|
@end deftp
|
|
|
|
|
|
|
|
The functions @code{cfsetospeed} and @code{cfsetispeed} report errors
|
|
|
|
only for speed values that the system simply cannot handle. If you
|
|
|
|
specify a speed value that is basically acceptable, then those functions
|
|
|
|
will succeed. But they do not check that a particular hardware device
|
|
|
|
can actually support the specified speeds---in fact, they don't know
|
|
|
|
which device you plan to set the speed for. If you use @code{tcsetattr}
|
|
|
|
to set the speed of a particular device to a value that it cannot
|
1998-06-23 01:08:51 +08:00
|
|
|
handle, @code{tcsetattr} returns @math{-1}.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
2012-02-28 22:44:20 +08:00
|
|
|
@strong{Portability note:} In @theglibc{}, the functions above
|
1995-02-18 09:27:10 +08:00
|
|
|
accept speeds measured in bits per second as input, and return speed
|
|
|
|
values measured in bits per second. Other libraries require speeds to
|
|
|
|
be indicated by special codes. For POSIX.1 portability, you must use
|
|
|
|
one of the following symbols to represent the speed; their precise
|
|
|
|
numeric values are system-dependent, but each name has a fixed meaning:
|
|
|
|
@code{B110} stands for 110 bps, @code{B300} for 300 bps, and so on.
|
|
|
|
There is no portable way to represent any speed but these, but these are
|
|
|
|
the only speeds that typical serial lines can support.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B0
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B50
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B75
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B110
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B134
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B150
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B200
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B300
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B600
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B1200
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B1800
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B2400
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B4800
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B9600
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B19200
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@vindex B38400
|
Update.
1997-10-26 18:12 Ulrich Drepper <drepper@cygnus.com>
* libio/genops.c: Partial undo of last patch.
* libio/stdfiles.c: Likewise.
* libio/iofdopen.c: Use _IO_FILE_complete, not _IO_file_plus.
* libio/iopopen.c: Likewise.
* libio/iovdprintf.c: Likewise.
* libio/libio.h: Remove duplicated `;'.
* libio/stdio.c: Remove misleading comment.
* libio/stdio.h: Declare standard streams as variables.
* login/Makefile (distribute): Add README.utmpd.
* login/README.utmpd: New file.
Provided by Mark M. Kettenis <kettenis@phys.uva.nl>.
* manual/job.texi: Document tcgetsid.
* manual/pattern.texi: Document globfree.
* manual/terminal.texi: Document B38400 ... B460800.
* posix/confstr.c: Print "-D_FILE_OFFSET_SIZE=64" for _CS_LFS_CFLAGS.
* posix/unistd.h: Add explanation of _POSIX_* constants.
* posix/unists.h: Add prototypes for __pread, __pread64, __pwrite
and __pwrite64.
* sysdeps/generic/pread.c: Define as __pread and make pread weak alias.
* sysdeps/generic/pread64.c: Likewise.
* sysdeps/generic/pwrite.c: Likewise.
* sysdeps/generic/pwrite64.c: Likewise.
* sysdeps/posix/pread.c: Likewise.
* sysdeps/posix/pwrite.c: Likewise.
* sysdeps/posix/pread64.c: New file.
* sysdeps/posix/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=posix] (sysdep_routines):
Add s_pread64 and s_pwrite64.
* sysdeps/unix/sysv/linux/pread.c: New file.
* sysdeps/unix/sysv/linux/pread64.c: New file.
* sysdeps/unix/sysv/linux/pwrite.c: New file.
* sysdeps/unix/sysv/linux/pwrite64.c: New file.
* sysdeps/unix/sysv/linux/s_pread64.c: New file.
* sysdeps/unix/sysv/linux/s_pwrite64.c: New file.
* sysdeps/unix/sysv/linux/syscalls.list: Add pread and pwrite.
* sysdeps/unix/sysv/linux/alpha/pread64.c: New (empty) file.
* sysdeps/unix/sysv/linux/alpha/pwrite64.c: New (empty) file.
* sysdeps/unix/sysv/linux/sparc/sparc64/pread64.c: New (empty) file.
* sysdeps/unix/sysv/linux/sparc/sparc64/pwrite64.c: New (empty) file.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add pread and pwrite
with weak aliases for *64 functions.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
* string/bits/string2.h: Add casts to allow void * arguments.
* sysdeps/i386/i486/bits/string.h: Define index and rindex only if
__USE_BSD or __USE_XOPEN_EXTENDED.
* sysdeps/unix/sysv/linux/bits/socket.h: Add SCM_RIGHTS and other
SCM_* constants from kernel header.
* termios/termios.h: Add prototype for tcgetsid.
1997-10-26 13:26 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* sunrpc/clnt_perr.c: Add trailing '\0' to strings.
* sunrpc/get_myaddr.c: Include rpc/clnt.h for prototypes.
* sunrpc/pmap_clnt.c: Use get_myaddress from header file.
1997-10-26 05:26 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Punt if any directory mentioned in the
enable-add-on parameter does not exist.
1997-10-25 19:25 Ulrich Drepper <drepper@cygnus.com>
* termios/Makefile (routines): Add tcgetsid.
* termios/tcgetsid.c: New file.
Provided by Mark M. Kettenis <kettenis@phys.uva.nl>.
1997-10-25 18:56 Ulrich Drepper <drepper@cygnus.com>
* stdlib/stdlib.h: Remove mblen optimization.
* stdlib/mblen.c: Rewrite to make sure global state is not changed.
Reported by anderson@metrolink.com.
1997-10-19 21:51 Wolfram Gloger <wg@wolfram.dent.med.uni-muenchen.de>
* malloc/thread-m.h [_LIBC]: Use new __libc_internal_tsd_{set,get}
interface for thread-specific data.
1997-10-25 06:51 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-addr.c: Use braces for correct logical grouping.
Patch by Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>.
1997-10-18 09:15 Geoff Keating <geoffk@ozemail.com.au>
* io/ftwtest-sh: Sometimes /tmp is a symlink to somewhere more
convenient; that caused this test to break.
* sysdeps/powerpc/dl-machine.h: Fix typo.
* sysdeps/powerpc/bits/fenv.h: Don't use floating-point registers
when -msoft-float is in effect, because this causes compilation to
stop.
* sysdeps/powerpc/bits/mathinlines.h: Likewise.
* rpm/template: Add description, use RPM flags rather than the ones
used to build the spec. Build in a temporary directory, not /.
* elf/dl-lookup.c: Don't include _itoa.h, it's not used.
* elf/dl-minimal.c: Use _itoa_word rather than _itoa. It seems that
_itoa is the only routine that ld.so uses that requires something
from libgcc.a on powerpc, so it would be best to avoid it in ld.so.
* elf/rtld.c: Likewise.
* sysdeps/generic/_strerror.c: Likewise.
* stdio-common/_itoa.c: Split out digits strings.
* stdio-common/itoa-digits.c: New file.
* stdio-common/Makefile: Add itoa-digits.
1997-10-21 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/filesys.texi (Scanning Directory Content): Document error
case more.
* dirent/scandir.c (scandir): Ignore errors from select function.
Suggested by urbanw@cs.umu.se (closes PR libc/316).
1997-10-25 06:18 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Corrections.
Patch by Erik Troan <ewt@redhat.com>.
1997-10-25 04:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Favour exact
matching of version function if both the general (1) and
glibc-specific (3) entry are present.
1997-10-22 18:47 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* sunrpc/rpc/clnt.h: Add get_myaddress prototype.
* nis/libnsl.map: Fix typo.
* nis/nis_call.c: Fix memory leak.
1997-10-22 19:29 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/memcmp.c: Define __P if not defined before.
Patch by Jim Meyering <meyering@eng.ascend.com>.
1997-10-21 22:09 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sys/prctl.h: New file by Richard Gooch
<rgooch@atnf.csiro.au>.
1997-10-21 21:50 Ulrich Drepper <drepper@cygnus.com>
* misc/syslog.c (vsyslog): Open console with O_NOCTTY.
Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-21 18:07 Ulrich Drepper <drepper@cygnus.com>
* posix/wordexp.c: Improve handling of $... expressions.
Patch by Tim Waugh <tim@cyberelk.demon.co.uk>.
1997-10-21 16:12 Ulrich Drepper <drepper@cygnus.com>
* manual/string.texi: Correct return values of bcopy and bzero.
Patch by Matthew Wilcox <willy@odie.barnet.ac.uk>.
1997-10-18 15:03 Philip Blundell <Philip.Blundell@pobox.com>
* sysdeps/unix/sysv/linux/bits/socket.h: Correct types of some
elements in struct msghdr and struct cmsghdr, to keep in step with
the kernel.
1997-10-17 22:29 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sparc/sparc32/init-first.h: Fix another
bug in startup code.
Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>.
1997-10-16 20:17 Richard Henderson <rth@cygnus.com>
* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Dump args to the
stack and give the kernel a pointer. Use the sysdep.h macros.
1997-10-17 04:07 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc32/elf/start.S: Calculate argv correctly.
Patch by Eric Delaunay <delaunay@lix.polytechnique.fr>.
1997-10-16 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/libm-ieee754/s_nextafterxf.c [!__STDC__]: Correct typo.
1997-10-16 14:50 Ulrich Drepper <drepper@cygnus.com>
* manual/pattern.texi: Document globfree.
1997-10-15 21:11 Philip Blundell <Philip.Blundell@pobox.com>
* sysdeps/unix/sysv/linux/net/if_packet.h: New file.
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
net/if_packet.h.
* sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_ASH): New type, for
64Mbps ASH.
(ARPHRD_ETHER): This is used for 100Mbps networks too.
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* Makerules (install): Use full pathnames for linker script.
This is to work around a limitation in `ld' while no better solution
is possible.
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* malloc/malloc.c (mmap_chunk): Put inline before static in
function definition to avoid compiler warning.
(malloc_extend): Likewise.
* sysdeps/generic/des_impl.c: Include "des.h" to avoid warning.
1997-10-15 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* NEWS: Fix @gnu.ai.mit.edu -> @gnu.org.
* README.template: Likewise.
* db/makedb.c: Likewise.
* elf/ldd.bash.in: Likewise.
* elf/ldd.sh.in: Likewise.
* intl/locale.alias: Likewise.
* login/programs/utmpd.c: Likewise.
* libio/stdfiles.c [!_IO_MTSAFE] (DEF_STDFILE): Fix parameter list.
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Rules: Remove all empty.* files.
(shared-only-routines): Correct implementation.
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/libm-ieee754/s_lrintl.c: Make compilable.
* sysdeps/libm-ieee754/s_llrintl.c: Likewise. Optimized.
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/ldd.bash.in: Only prepend ./ if the file contains no slash
at all.
* elf/ldd.sh.in: Likewise.
1997-10-14 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/sys/ucontext.h: New file.
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/s_scalbln.c: New (empty) file.
* sysdeps/m68k/fpu/s_scalblnf.c: New (empty) file.
* sysdeps/m68k/fpu/s_scalblnl.c: New (empty) file.
* sysdeps/m68k/fpu/s_scalbn.c: Add scalbln alias.
* sysdeps/m68k/fpu/s_scalbnf.c: Adapted.
* sysdeps/m68k/fpu/s_scalbnl.c: Adapted.
* sysdeps/m68k/fpu/s_lrint.c: Add standard skeleton stuff.
* sysdeps/m68k/fpu/s_lrintf.c: New file.
* sysdeps/m68k/fpu/s_lrintl.c: New file.
* sysdeps/m68k/fpu/bits/mathinline.h: Add fma and scalbln. Update
lrint and scalbn.
(__m81_inline) [__cplusplus]: Define to __inline.
* math/bits/mathcalls.h: Remove whitespace before second argument
of __MATHDECL. Add note explaining this.
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* manual/arith.texi (Absolute Value): Spelling fix.
1997-10-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/obstack.h (obstack_empty_p) [!__GNUC__]: Properly
parenthesize the macro parameter.
* Rules: Remove rules to magically install <subdir>.h headers.
1997-10-27 04:13:00 +08:00
|
|
|
@comment termios.h
|
|
|
|
@comment GNU
|
|
|
|
@vindex B57600
|
|
|
|
@comment termios.h
|
|
|
|
@comment GNU
|
|
|
|
@vindex B115200
|
|
|
|
@comment termios.h
|
|
|
|
@comment GNU
|
|
|
|
@vindex B230400
|
|
|
|
@comment termios.h
|
|
|
|
@comment GNU
|
|
|
|
@vindex B460800
|
1995-02-18 09:27:10 +08:00
|
|
|
@smallexample
|
|
|
|
B0 B50 B75 B110 B134 B150 B200
|
|
|
|
B300 B600 B1200 B1800 B2400 B4800
|
Update.
1997-11-11 21:30 Ulrich Drepper <drepper@cygnus.com>
* include/sys/stat.h: Define stat, fstat, lstat and *64 variants
as macros so the the library compiles correctly even without
optimization.
* io/fstat.c: Undef fstat.
* io/fstat64.c: Undef fstat64
* io/lstat.c: Undef lstat.
* io/lstat64.c: Undef lstat64
* io/stat.c: Undef stat.
* io/stat64.c: Undef stat64
* io/fts.c: Include <include/sys/stat.h> to get macro definitions.
* io/ftw.c: Likewise.
* io/getdirname.c: Likewise.
* Makefile (install): Run test-installation.pl if possible.
* db2/Makefile: Update from db-2.3.12.
* db2/db.h: Likewise.
* db2/db_int.h: Likewise.
* db2/btree/bt_cursor.c: Likewise.
* db2/btree/bt_delete.c: Likewise.
* db2/btree/bt_open.c: Likewise.
* db2/btree/bt_put.c: Likewise.
* db2/btree/bt_rec.c: Likewise.
* db2/btree/bt_recno.c: Likewise.
* db2/btree/bt_search.c: Likewise.
* db2/btree/bt_split.c: Likewise.
* db2/btree/bt_stat.c: Likewise.
* db2/btree/btree.src: Likewise.
* db2/btree/btree_auto.c: Likewise.
* db2/btree/bt_cursor.c: Likewise.
* db2/btree/bt_delete.c: Likewise.
* db2/btree/bt_open.c: Likewise.
* db2/btree/bt_put.c: Likewise.
* db2/btree/bt_rec.c: Likewise.
* db2/btree/bt_recno.c: Likewise.
* db2/btree/bt_search.c: Likewise.
* db2/btree/bt_split.c: Likewise.
* db2/btree/bt_stat.c: Likewise.
* db2/btree/btree.src: Likewise.
* db2/btree/btree_auto.c: Likewise.
* db2/common/db_appinit.c: Likewise.
* db2/common/db_apprec.c: Likewise.
* db2/common/db_byteorder.c: Likewise.
* db2/common/db_region.c: Likewise.
* db2/db/db.c: Likewise
* db2/db/db.src: Likewise
* db2/db/db_auto.c: Likewise
* db2/db/db_dispatch.c: Likewise
* db2/db/db_dup.c: Likewise
* db2/db/db_overflow.c: Likewise
* db2/db/db_pr.c: Likewise
* db2/db/db_rec.c: Likewise
* db2/db/db_ret.c: Likewise
* db2/db/db_thread.c: Likewise
* db2/db185/db185.c: Likewise.
* db2/hash/hash.c: Likewise.
* db2/hash/hash.src: Likewise.
* db2/hash/hash_auto.c: Likewise.
* db2/hash/hash_dup.c: Likewise.
* db2/hash/hash_page.c: Likewise.
* db2/hash/hash_rec.c: Likewise.
* db2/include/btree_auto.h: Likewise.
* db2/include/btree_ext.h: Likewise.
* db2/include/clib_ext.h: Likewise.
* db2/include/common_ext.h: Likewise.
* db2/include/db.h.src: Likewise.
* db2/include/db_am.h: Likewise.
* db2/include/db_auto.h: Likewise.
* db2/include/db_cxx.h: Likewise.
* db2/include/db_ext.h: Likewise.
* db2/include/db_int.h.src: Likewise.
* db2/include/hash.h: Likewise.
* db2/include/hash_auto.h: Likewise.
* db2/include/hash_ext.h: Likewise.
* db2/include/lock.h: Likewise.
* db2/include/lock_ext.h: Likewise.
* db2/include/log.h: Likewise.
* db2/include/log_ext.h: Likewise.
* db2/include/mp.h: Likewise.
* db2/include/mp_ext.h: Likewise.
* db2/include/mutex_ext.h: Likewise.
* db2/include/os_ext.h: Likewise.
* db2/include/os_func.h: Likewise.
* db2/include/txn.h: Likewise.
* db2/include/txn_ext.h: Likewise.
* db2/lock/lock.c: Likewise.
* db2/lock/lock_deadlock.c: Likewise.
* db2/log/log.c: Likewise.
* db2/log/log_archive.c: Likewise.
* db2/log/log_auto.c: Likewise.
* db2/log/log_findckp.c: Likewise.
* db2/log/log_get.c: Likewise.
* db2/log/log_put.c: Likewise.
* db2/log/log_rec.c: Likewise.
* db2/log/log_register.c: Likewise.
* db2/mp/mp_bh.c: Likewise.
* db2/mp/mp_fget.c: Likewise.
* db2/mp/mp_fopen.c: Likewise.
* db2/mp/mp_fput.c: Likewise.
* db2/mp/mp_fset.c: Likewise.
* db2/mp/mp_open.c: Likewise.
* db2/mp/mp_pr.c: Likewise.
* db2/mp/mp_region.c: Likewise.
* db2/mp/mp_sync.c: Likewise.
* db2/mutex/mutex.c: Likewise.
* db2/os/os_abs.c: Likewise.
* db2/os/os_dir.c: Likewise.
* db2/os/os_fid.c: Likewise.
* db2/os/os_fsync.c: Likewise.
* db2/os/os_func.c: Likewise.
* db2/os/os_map.c: Likewise.
* db2/os/os_oflags.c: Likewise.
* db2/os/os_open.c: Likewise.
* db2/os/os_rpath.c: Likewise.
* db2/os/os_rw.c: Likewise.
* db2/os/os_seek.c: Likewise.
* db2/os/os_sleep.c: Likewise.
* db2/os/os_stat.c: Likewise.
* db2/os/os_unlink.c: Likewise.
* db2/progs/db_deadlock/db_deadlock.c: Likewise.
* db2/progs/db_dump/db_dump.c: Likewise.
* db2/progs/db_load/db_load.c: Likewise.
* db2/progs/db_recover/db_recover.c: Likewise.
* db2/progs/db_stat/db_stat.c: Likewise.
* db2/txn/txn.c: Likewise.
* db2/txn/txn_auto.c: Likewise.
* db2/txn/txn_rec.c: Likewise.
* db2/os/db_os_abs.c: Removed.
* db2/os/db_os_dir.c: Removed.
* db2/os/db_os_fid.c: Removed.
* db2/os/db_os_lseek.c: Removed.
* db2/os/db_os_mmap.c: Removed.
* db2/os/db_os_open.c: Removed.
* db2/os/db_os_rw.c: Removed.
* db2/os/db_os_sleep.c: Removed.
* db2/os/db_os_stat.c: Removed.
* db2/os/db_os_unlink.c: Removed.
* libio/stdio.h (fopen): Add __restrict to parameters.
* manual/process.texi (system): Describe behaviour for NULL argument.
* stdio-common/printf-parse.h: Parse hh modifier.
* stdio-common/vfprintf.c: Handle hh modifier.
* stdio-common/vfscanf.c: Likewise.
* manual/stdio.texi: Describe hh modifier for scanf/printf.
* math/complex.h: Don't define _Imaginary_I, but instead _Complex_I.
gcc does no yet know the `imaginary' keyword.
* math/test-math.c: Add little test for know gcc bug.
* math/tgmath.h: Make complex versions of log10() only available
if __USE_GNU.
* stdlib/test-canon.c: Fix typo.
* sysdeps/generic/setenv.c: Avoid compilation warnings.
Reported by Jim Meyering.
* sysdeps/generic/bits/errno.h: EILSEQ is an ISO C error number.
* sysdeps/mach/hurd/bits/errno.h: Likewise.
* sysdeps/standalone/bits/errno.h: Likewise.
* sysdeps/unix/sysv/linux/bits/errno.h: Likewise.
* sysdeps/i386/i586/memcpy.S: New file.
* sysdeps/i386/i586/mempcpy.S: New file.
* sysdeps/i386/i586/memset.S: Fix typo.
* sysdeps/posix/getcwd.c: Define HAVE_MEMPCPY for _LIBC. Add casts.
* sysdeps/posix/system.c: Add comment to explain code.
* sysdeps/wordsize-32/inttypes.h: Include <stddef.h> for wchar_t.
Define PTRDIFF_{MIN,MAX}, SIG_ATOMIC_{MIN,MAX}, SIZE_MAX,
WCHAR_{MIN,MAX}, WINT_{MIN,MAX}.
Define wcstoimax, wcstoumax.
* sysdeps/wordsize-64/inttypes.h: Likewise.
* wcsmbs/wchar.h: Define WCHAR_{MIN,MAX} if not already defined.
Declare __wcsto{l,ul,ll,ull}_internal only if not already done.
* time/Makefile (routines): Add strfxtime.
* time/strftime.c: Implement %F and %f format.
* time/strfxtime.c: New file.
* time/time.h: Define new types and symbols from ISO C 9X.
* time/mktime.c: Little comment correction.
1997-11-10 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/libm-ieee754/s_sincosl.c: Fix typo.
* sysdeps/libm-ieee754/s_tanl.c: Fix typo.
* sysdeps/libm-ieee754/s_floorl.c: Correct typos.
* sysdeps/libm-ieee754/e_remainderl.c: Replace
EXTRACT_LDOUBLE_WORDS by GET_LDOUBLE_WORDS.
* sysdeps/libm-ieee754/e_atan2l.c: Replace EXTRACT_LDOUBLE_WORDS
by GET_LDOUBLE_WORDS.
* sysdeps/libm-ieee754/s_scalbnl.c: Replace ";" by "," for correct
variable declaration.
* sysdeps/libm-ieee754/s_scalblnl.c: Likewise.
* sysdeps/libm-ieee754/s_lrint.c (__lrint): Correct function.
* math/libm-test.c (sqrt_test): Add test for sqrt (0.25).
(asin_test): Add more test.
1997-11-10 23:34 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-ieee754/e_asin.c: Add braces to make code clearer
and to not confuse the poor compiler.
* sysdeps/libm-ieee754/e_asinf.c: Likewise.
Reported by vertex@cagent.com.
1997-11-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/dl-lookup.c (do_lookup): Don't accept the base version if we
require a specific one.
* libio/oldfreopen.c: Bind old symbols to version GLIBC_2.0.
* libio/oldiofopen.c: Likewise.
* libio/oldstdfiles.c: Likewise.
* libc.map: Export them.
1997-11-10 07:40 H.J. Lu <hjl@gnu.ai.mit.edu>
* stdlib/exit.c (exit): Handle recursive calls to exit ().
1997-11-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/s_llrint.c: Fixed to take double argument
instead of long double.
* sysdeps/m68k/fpu/s_llrintf.c: New file.
* sysdeps/m68k/fpu/s_llrintl.c: New file.
* sysdeps/libm-ieee754/s_llrint.c: Make compilable and fix
overflow condition.
* sysdeps/libm-ieee754/s_llrintf.c: Fix overflow condition.
* sysdeps/libm-ieee754/s_llrintl.c: Likewise.
* sysdeps/libm-ieee754/s_llround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_lrintf.c: Likewise.
* sysdeps/libm-ieee754/s_lrintl.c: Likewise.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* math/libm-test.c: Test all three variants of lrint and llrint.
Fix typos in lround and llround tests. Add tests for boundary
cases for lrint and llround.
1997-11-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* manual/arith.texi: Misc doc fixes.
* manual/ctype.texi: Likewise.
* manual/pattern.texi: Likewise.
* manual/terminal.texi: Likewise.
1997-11-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/xstatconv.c: Use struct assignment
instead of memcpy to let the compiler use whatever it regards as
optimal.
* sysdeps/unix/sysv/linux/alpha/xstatconv.c: Likewise.
1997-11-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers)
[$(subdir)=misc]: Add sys/prctl.h.
* sysdeps/unix/sysv/linux/Dist: Distribute it.
1997-11-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* io/ftwtest-sh: Don't use the unknown which command, instead try
pwd as /bin/pwd and /usr/bin/pwd.
1997-11-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* manual/maint.texi (Tools for Installation): Don't recommend
broken version 3.76.1 of make.
(Porting): Fix wording.
1997-11-06 06:13 H.J. Lu <hjl@gnu.ai.mit.edu>
* config.make.in (build-pic-default): New, defined with
pic_default.
* configure.in (pic_default): New, set to yes if PIC is
default.
* Makeconfig (CPPFLAGS-.o, CPPFLAGS-.op, CPPFLAGS-.og,
CPPFLAGS-.ob): Add -DPIC if $(build-pic-default) is yes.
1997-11-09 18:15 Ulrich Drepper <drepper@cygnus.com>
* Makerules (libc.so): Fix typo.
* csu/Makefile (CFLAGS-initfini.s): Correctly fix moving function
definition. Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
* stdlib/strtod.c: Handle numbers like 0.0e10000 correctly which
produce ±0.0. Reported by Joe Keane <jgk@jgk.org>.
* sysdeps/libm-ieee754/s_ceill.c: Fix typos.
* sysdeps/libm-ieee754/s_llrint.c: Correct code, it never worked.
1997-11-06 07:00 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/unix/sysv/i386/i686/time.S: Removed.
1997-11-08 14:07 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/libnsl.map: Add __do_niscall2 for nis_cachemgr.
* nis/nis_call.c: Set UDP resend timeout correct.
* nis/nss_compat/compat-grp.c: Rewritten to make it faster.
* nis/nss_compat/compat-pwd.c: Likewise.
* nis/nss_compat/compat-spwd.c: Likewise.
* nis/ypclnt.c: Fix UDP resend timeout, fix yp_bind/do_ypcall
interaction.
* inet/protocols/routed.h: Include sys/socket.h.
* inet/protocols/talkd.h: Likewise.
* inet/protocols/timed.h: Include rpc/types.h.
* sunrpc/rpc/pmap_clnt.h: Include rpc/clnt.h.
1997-11-06 01:39 Ulrich Drepper <drepper@cygnus.com>
* Makerules (libc.so): Add missing closing brace.
1997-11-05 Brendan Kehoe <brendan@lisa.cygnus.com>
* libio.h (__P): Name its arg `p' instead of `params'.
This was added solely to work around problems with
the definition of __P in the Solaris math.h header.
1997-11-12 08:06:02 +08:00
|
|
|
B9600 B19200 B38400 B57600 B115200
|
|
|
|
B230400 B460800
|
1995-02-18 09:27:10 +08:00
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@vindex EXTA
|
|
|
|
@vindex EXTB
|
|
|
|
BSD defines two additional speed symbols as aliases: @code{EXTA} is an
|
|
|
|
alias for @code{B19200} and @code{EXTB} is an alias for @code{B38400}.
|
|
|
|
These aliases are obsolete.
|
|
|
|
|
|
|
|
@node Special Characters
|
|
|
|
@subsection Special Characters
|
|
|
|
|
|
|
|
In canonical input, the terminal driver recognizes a number of special
|
|
|
|
characters which perform various control functions. These include the
|
|
|
|
ERASE character (usually @key{DEL}) for editing input, and other editing
|
|
|
|
characters. The INTR character (normally @kbd{C-c}) for sending a
|
|
|
|
@code{SIGINT} signal, and other signal-raising characters, may be
|
|
|
|
available in either canonical or noncanonical input mode. All these
|
|
|
|
characters are described in this section.
|
|
|
|
|
|
|
|
The particular characters used are specified in the @code{c_cc} member
|
|
|
|
of the @code{struct termios} structure. This member is an array; each
|
|
|
|
element specifies the character for a particular role. Each element has
|
|
|
|
a symbolic constant that stands for the index of that element---for
|
1998-05-04 21:19:20 +08:00
|
|
|
example, @code{VINTR} is the index of the element that specifies the INTR
|
|
|
|
character, so storing @code{'='} in @code{@var{termios}.c_cc[VINTR]}
|
1995-02-18 09:27:10 +08:00
|
|
|
specifies @samp{=} as the INTR character.
|
|
|
|
|
|
|
|
@vindex _POSIX_VDISABLE
|
|
|
|
On some systems, you can disable a particular special character function
|
|
|
|
by specifying the value @code{_POSIX_VDISABLE} for that role. This
|
|
|
|
value is unequal to any possible character code. @xref{Options for
|
|
|
|
Files}, for more information about how to tell whether the operating
|
|
|
|
system you are using supports @code{_POSIX_VDISABLE}.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Editing Characters:: Special characters that terminate lines and
|
|
|
|
delete text, and other editing functions.
|
|
|
|
* Signal Characters:: Special characters that send or raise signals
|
|
|
|
to or for certain classes of processes.
|
|
|
|
* Start/Stop Characters:: Special characters that suspend or resume
|
|
|
|
suspended output.
|
|
|
|
* Other Special:: Other special characters for BSD systems:
|
|
|
|
they can discard output, and print status.
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Editing Characters
|
|
|
|
@subsubsection Characters for Input Editing
|
|
|
|
|
|
|
|
These special characters are active only in canonical input mode.
|
|
|
|
@xref{Canonical or Not}.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VEOF
|
|
|
|
@cindex EOF character
|
|
|
|
This is the subscript for the EOF character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VEOF]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The EOF character is recognized only in canonical input mode. It acts
|
|
|
|
as a line terminator in the same way as a newline character, but if the
|
|
|
|
EOF character is typed at the beginning of a line it causes @code{read}
|
|
|
|
to return a byte count of zero, indicating end-of-file. The EOF
|
|
|
|
character itself is discarded.
|
|
|
|
|
|
|
|
Usually, the EOF character is @kbd{C-d}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VEOL
|
|
|
|
@cindex EOL character
|
|
|
|
This is the subscript for the EOL character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VEOL]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The EOL character is recognized only in canonical input mode. It acts
|
|
|
|
as a line terminator, just like a newline character. The EOL character
|
|
|
|
is not discarded; it is read as the last character in the input line.
|
|
|
|
|
|
|
|
@c !!! example: this is set to ESC by 4.3 csh with "set filec" so it can
|
|
|
|
@c complete partial lines without using cbreak or raw mode.
|
|
|
|
|
|
|
|
You don't need to use the EOL character to make @key{RET} end a line.
|
|
|
|
Just set the ICRNL flag. In fact, this is the default state of
|
|
|
|
affairs.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VEOL2
|
|
|
|
@cindex EOL2 character
|
|
|
|
This is the subscript for the EOL2 character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VEOL2]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The EOL2 character works just like the EOL character (see above), but it
|
|
|
|
can be a different character. Thus, you can specify two characters to
|
|
|
|
terminate an input line, by setting EOL to one of them and EOL2 to the
|
|
|
|
other.
|
|
|
|
|
|
|
|
The EOL2 character is a BSD extension; it exists only on BSD systems
|
2012-03-08 09:27:38 +08:00
|
|
|
and @gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VERASE
|
|
|
|
@cindex ERASE character
|
|
|
|
This is the subscript for the ERASE character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VERASE]} holds the
|
|
|
|
character itself.
|
|
|
|
|
|
|
|
The ERASE character is recognized only in canonical input mode. When
|
|
|
|
the user types the erase character, the previous character typed is
|
|
|
|
discarded. (If the terminal generates multibyte character sequences,
|
|
|
|
this may cause more than one byte of input to be discarded.) This
|
|
|
|
cannot be used to erase past the beginning of the current line of text.
|
|
|
|
The ERASE character itself is discarded.
|
|
|
|
@c !!! mention ECHOE here
|
|
|
|
|
|
|
|
Usually, the ERASE character is @key{DEL}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VWERASE
|
|
|
|
@cindex WERASE character
|
|
|
|
This is the subscript for the WERASE character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VWERASE]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The WERASE character is recognized only in canonical mode. It erases an
|
|
|
|
entire word of prior input, and any whitespace after it; whitespace
|
|
|
|
characters before the word are not erased.
|
|
|
|
|
|
|
|
The definition of a ``word'' depends on the setting of the
|
|
|
|
@code{ALTWERASE} mode; @pxref{Local Modes}.
|
|
|
|
|
|
|
|
If the @code{ALTWERASE} mode is not set, a word is defined as a sequence
|
|
|
|
of any characters except space or tab.
|
|
|
|
|
|
|
|
If the @code{ALTWERASE} mode is set, a word is defined as a sequence of
|
|
|
|
characters containing only letters, numbers, and underscores, optionally
|
|
|
|
followed by one character that is not a letter, number, or underscore.
|
|
|
|
|
|
|
|
The WERASE character is usually @kbd{C-w}.
|
|
|
|
|
|
|
|
This is a BSD extension.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VKILL
|
|
|
|
@cindex KILL character
|
|
|
|
This is the subscript for the KILL character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VKILL]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The KILL character is recognized only in canonical input mode. When the
|
|
|
|
user types the kill character, the entire contents of the current line
|
|
|
|
of input are discarded. The kill character itself is discarded too.
|
|
|
|
|
|
|
|
The KILL character is usually @kbd{C-u}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VREPRINT
|
|
|
|
@cindex REPRINT character
|
|
|
|
This is the subscript for the REPRINT character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VREPRINT]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The REPRINT character is recognized only in canonical mode. It reprints
|
|
|
|
the current input line. If some asynchronous output has come while you
|
|
|
|
are typing, this lets you see the line you are typing clearly again.
|
|
|
|
|
|
|
|
The REPRINT character is usually @kbd{C-r}.
|
|
|
|
|
|
|
|
This is a BSD extension.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Signal Characters
|
|
|
|
@subsubsection Characters that Cause Signals
|
|
|
|
|
|
|
|
These special characters may be active in either canonical or noncanonical
|
|
|
|
input mode, but only when the @code{ISIG} flag is set (@pxref{Local
|
|
|
|
Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VINTR
|
|
|
|
@cindex INTR character
|
|
|
|
@cindex interrupt character
|
|
|
|
This is the subscript for the INTR character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VINTR]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The INTR (interrupt) character raises a @code{SIGINT} signal for all
|
|
|
|
processes in the foreground job associated with the terminal. The INTR
|
|
|
|
character itself is then discarded. @xref{Signal Handling}, for more
|
|
|
|
information about signals.
|
|
|
|
|
|
|
|
Typically, the INTR character is @kbd{C-c}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VQUIT
|
|
|
|
@cindex QUIT character
|
|
|
|
This is the subscript for the QUIT character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VQUIT]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The QUIT character raises a @code{SIGQUIT} signal for all processes in
|
|
|
|
the foreground job associated with the terminal. The QUIT character
|
|
|
|
itself is then discarded. @xref{Signal Handling}, for more information
|
|
|
|
about signals.
|
|
|
|
|
|
|
|
Typically, the QUIT character is @kbd{C-\}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VSUSP
|
|
|
|
@cindex SUSP character
|
|
|
|
@cindex suspend character
|
|
|
|
This is the subscript for the SUSP character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VSUSP]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The SUSP (suspend) character is recognized only if the implementation
|
|
|
|
supports job control (@pxref{Job Control}). It causes a @code{SIGTSTP}
|
|
|
|
signal to be sent to all processes in the foreground job associated with
|
|
|
|
the terminal. The SUSP character itself is then discarded.
|
|
|
|
@xref{Signal Handling}, for more information about signals.
|
|
|
|
|
|
|
|
Typically, the SUSP character is @kbd{C-z}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
Few applications disable the normal interpretation of the SUSP
|
|
|
|
character. If your program does this, it should provide some other
|
|
|
|
mechanism for the user to stop the job. When the user invokes this
|
|
|
|
mechanism, the program should send a @code{SIGTSTP} signal to the
|
|
|
|
process group of the process, not just to the process itself.
|
|
|
|
@xref{Signaling Another Process}.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VDSUSP
|
|
|
|
@cindex DSUSP character
|
|
|
|
@cindex delayed suspend character
|
|
|
|
This is the subscript for the DSUSP character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VDSUSP]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The DSUSP (suspend) character is recognized only if the implementation
|
|
|
|
supports job control (@pxref{Job Control}). It sends a @code{SIGTSTP}
|
|
|
|
signal, like the SUSP character, but not right away---only when the
|
|
|
|
program tries to read it as input. Not all systems with job control
|
2016-10-06 14:37:28 +08:00
|
|
|
support DSUSP; only BSD-compatible systems do (including @gnuhurdsystems{}).
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
@xref{Signal Handling}, for more information about signals.
|
|
|
|
|
|
|
|
Typically, the DSUSP character is @kbd{C-y}.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Start/Stop Characters
|
|
|
|
@subsubsection Special Characters for Flow Control
|
|
|
|
|
|
|
|
These special characters may be active in either canonical or noncanonical
|
|
|
|
input mode, but their use is controlled by the flags @code{IXON} and
|
|
|
|
@code{IXOFF} (@pxref{Input Modes}).
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VSTART
|
|
|
|
@cindex START character
|
|
|
|
This is the subscript for the START character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VSTART]} holds the
|
|
|
|
character itself.
|
|
|
|
|
|
|
|
The START character is used to support the @code{IXON} and @code{IXOFF}
|
|
|
|
input modes. If @code{IXON} is set, receiving a START character resumes
|
|
|
|
suspended output; the START character itself is discarded. If
|
|
|
|
@code{IXANY} is set, receiving any character at all resumes suspended
|
|
|
|
output; the resuming character is not discarded unless it is the START
|
2016-10-06 14:37:28 +08:00
|
|
|
character. If @code{IXOFF} is set, the system may also transmit START
|
1995-02-18 09:27:10 +08:00
|
|
|
characters to the terminal.
|
|
|
|
|
|
|
|
The usual value for the START character is @kbd{C-q}. You may not be
|
|
|
|
able to change this value---the hardware may insist on using @kbd{C-q}
|
|
|
|
regardless of what you specify.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VSTOP
|
|
|
|
@cindex STOP character
|
|
|
|
This is the subscript for the STOP character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VSTOP]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The STOP character is used to support the @code{IXON} and @code{IXOFF}
|
|
|
|
input modes. If @code{IXON} is set, receiving a STOP character causes
|
|
|
|
output to be suspended; the STOP character itself is discarded. If
|
|
|
|
@code{IXOFF} is set, the system may also transmit STOP characters to the
|
|
|
|
terminal, to prevent the input queue from overflowing.
|
|
|
|
|
|
|
|
The usual value for the STOP character is @kbd{C-s}. You may not be
|
|
|
|
able to change this value---the hardware may insist on using @kbd{C-s}
|
|
|
|
regardless of what you specify.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Other Special
|
|
|
|
@subsubsection Other Special Characters
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VLNEXT
|
|
|
|
@cindex LNEXT character
|
|
|
|
This is the subscript for the LNEXT character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VLNEXT]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The LNEXT character is recognized only when @code{IEXTEN} is set, but in
|
|
|
|
both canonical and noncanonical mode. It disables any special
|
|
|
|
significance of the next character the user types. Even if the
|
1996-12-20 09:39:50 +08:00
|
|
|
character would normally perform some editing function or generate a
|
1995-02-18 09:27:10 +08:00
|
|
|
signal, it is read as a plain character. This is the analogue of the
|
|
|
|
@kbd{C-q} command in Emacs. ``LNEXT'' stands for ``literal next.''
|
|
|
|
|
|
|
|
The LNEXT character is usually @kbd{C-v}.
|
2012-03-08 09:27:38 +08:00
|
|
|
|
|
|
|
This character is available on BSD systems and @gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VDISCARD
|
|
|
|
@cindex DISCARD character
|
|
|
|
This is the subscript for the DISCARD character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VDISCARD]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The DISCARD character is recognized only when @code{IEXTEN} is set, but
|
|
|
|
in both canonical and noncanonical mode. Its effect is to toggle the
|
|
|
|
discard-output flag. When this flag is set, all program output is
|
|
|
|
discarded. Setting the flag also discards all output currently in the
|
|
|
|
output buffer. Typing any other character resets the flag.
|
2012-03-08 09:27:38 +08:00
|
|
|
|
|
|
|
This character is available on BSD systems and @gnulinuxhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypevr Macro int VSTATUS
|
|
|
|
@cindex STATUS character
|
|
|
|
This is the subscript for the STATUS character in the special control
|
|
|
|
character array. @code{@var{termios}.c_cc[VSTATUS]} holds the character
|
|
|
|
itself.
|
|
|
|
|
|
|
|
The STATUS character's effect is to print out a status message about how
|
|
|
|
the current process is running.
|
|
|
|
|
|
|
|
The STATUS character is recognized only in canonical mode, and only if
|
|
|
|
@code{NOKERNINFO} is not set.
|
2012-03-08 09:27:38 +08:00
|
|
|
|
|
|
|
This character is available only on BSD systems and @gnuhurdsystems{}.
|
1995-02-18 09:27:10 +08:00
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@node Noncanonical Input
|
|
|
|
@subsection Noncanonical Input
|
|
|
|
|
|
|
|
In noncanonical input mode, the special editing characters such as
|
|
|
|
ERASE and KILL are ignored. The system facilities for the user to edit
|
|
|
|
input are disabled in noncanonical mode, so that all input characters
|
|
|
|
(unless they are special for signal or flow-control purposes) are passed
|
|
|
|
to the application program exactly as typed. It is up to the
|
|
|
|
application program to give the user ways to edit the input, if
|
|
|
|
appropriate.
|
|
|
|
|
|
|
|
Noncanonical mode offers special parameters called MIN and TIME for
|
|
|
|
controlling whether and how long to wait for input to be available. You
|
|
|
|
can even use them to avoid ever waiting---to return immediately with
|
|
|
|
whatever input is available, or with no input.
|
|
|
|
|
|
|
|
The MIN and TIME are stored in elements of the @code{c_cc} array, which
|
|
|
|
is a member of the @w{@code{struct termios}} structure. Each element of
|
|
|
|
this array has a particular role, and each element has a symbolic
|
|
|
|
constant that stands for the index of that element. @code{VMIN} and
|
2016-10-06 14:37:28 +08:00
|
|
|
@code{VTIME} are the names for the indices in the array of the MIN and
|
1995-02-18 09:27:10 +08:00
|
|
|
TIME slots.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VMIN
|
|
|
|
@cindex MIN termios slot
|
|
|
|
This is the subscript for the MIN slot in the @code{c_cc} array. Thus,
|
|
|
|
@code{@var{termios}.c_cc[VMIN]} is the value itself.
|
|
|
|
|
|
|
|
The MIN slot is only meaningful in noncanonical input mode; it
|
|
|
|
specifies the minimum number of bytes that must be available in the
|
|
|
|
input queue in order for @code{read} to return.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevr Macro int VTIME
|
|
|
|
@cindex TIME termios slot
|
|
|
|
This is the subscript for the TIME slot in the @code{c_cc} array. Thus,
|
|
|
|
@code{@var{termios}.c_cc[VTIME]} is the value itself.
|
|
|
|
|
|
|
|
The TIME slot is only meaningful in noncanonical input mode; it
|
|
|
|
specifies how long to wait for input before returning, in units of 0.1
|
|
|
|
seconds.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
The MIN and TIME values interact to determine the criterion for when
|
|
|
|
@code{read} should return; their precise meanings depend on which of
|
|
|
|
them are nonzero. There are four possible cases:
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
Both TIME and MIN are nonzero.
|
|
|
|
|
|
|
|
In this case, TIME specifies how long to wait after each input character
|
|
|
|
to see if more input arrives. After the first character received,
|
|
|
|
@code{read} keeps waiting until either MIN bytes have arrived in all, or
|
|
|
|
TIME elapses with no further input.
|
|
|
|
|
|
|
|
@code{read} always blocks until the first character arrives, even if
|
|
|
|
TIME elapses first. @code{read} can return more than MIN characters if
|
|
|
|
more than MIN happen to be in the queue.
|
|
|
|
|
1996-12-20 09:39:50 +08:00
|
|
|
@item
|
1995-02-18 09:27:10 +08:00
|
|
|
Both MIN and TIME are zero.
|
|
|
|
|
|
|
|
In this case, @code{read} always returns immediately with as many
|
|
|
|
characters as are available in the queue, up to the number requested.
|
|
|
|
If no input is immediately available, @code{read} returns a value of
|
|
|
|
zero.
|
|
|
|
|
|
|
|
@item
|
|
|
|
MIN is zero but TIME has a nonzero value.
|
|
|
|
|
|
|
|
In this case, @code{read} waits for time TIME for input to become
|
|
|
|
available; the availability of a single byte is enough to satisfy the
|
|
|
|
read request and cause @code{read} to return. When it returns, it
|
|
|
|
returns as many characters as are available, up to the number requested.
|
|
|
|
If no input is available before the timer expires, @code{read} returns a
|
|
|
|
value of zero.
|
|
|
|
|
|
|
|
@item
|
|
|
|
TIME is zero but MIN has a nonzero value.
|
|
|
|
|
|
|
|
In this case, @code{read} waits until at least MIN bytes are available
|
|
|
|
in the queue. At that time, @code{read} returns as many characters as
|
|
|
|
are available, up to the number requested. @code{read} can return more
|
|
|
|
than MIN characters if more than MIN happen to be in the queue.
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
What happens if MIN is 50 and you ask to read just 10 bytes?
|
|
|
|
Normally, @code{read} waits until there are 50 bytes in the buffer (or,
|
|
|
|
more generally, the wait condition described above is satisfied), and
|
|
|
|
then reads 10 of them, leaving the other 40 buffered in the operating
|
|
|
|
system for a subsequent call to @code{read}.
|
|
|
|
|
|
|
|
@strong{Portability note:} On some systems, the MIN and TIME slots are
|
|
|
|
actually the same as the EOF and EOL slots. This causes no serious
|
|
|
|
problem because the MIN and TIME slots are used only in noncanonical
|
|
|
|
input and the EOF and EOL slots are used only in canonical input, but it
|
2012-02-28 22:44:20 +08:00
|
|
|
isn't very clean. @Theglibc{} allocates separate slots for these
|
1995-02-18 09:27:10 +08:00
|
|
|
uses.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
2003-03-01 09:14:31 +08:00
|
|
|
@deftypefun void cfmakeraw (struct termios *@var{termios-p})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c There's no guarantee the changes are atomic, but since this is not an
|
|
|
|
@c opaque type, callers ought to ensure mutual exclusion to the termios
|
|
|
|
@c object.
|
1995-02-18 09:27:10 +08:00
|
|
|
This function provides an easy way to set up @code{*@var{termios-p}} for
|
|
|
|
what has traditionally been called ``raw mode'' in BSD. This uses
|
|
|
|
noncanonical input, and turns off most processing to give an unmodified
|
|
|
|
channel to the terminal.
|
|
|
|
|
|
|
|
It does exactly this:
|
|
|
|
@smallexample
|
|
|
|
@var{termios-p}->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
|
|
|
|INLCR|IGNCR|ICRNL|IXON);
|
|
|
|
@var{termios-p}->c_oflag &= ~OPOST;
|
|
|
|
@var{termios-p}->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
|
|
|
@var{termios-p}->c_cflag &= ~(CSIZE|PARENB);
|
|
|
|
@var{termios-p}->c_cflag |= CS8;
|
|
|
|
@end smallexample
|
|
|
|
@end deftypefun
|
|
|
|
|
2000-05-01 01:56:00 +08:00
|
|
|
|
|
|
|
@node BSD Terminal Modes
|
|
|
|
@section BSD Terminal Modes
|
|
|
|
@cindex terminal modes, BSD
|
|
|
|
|
|
|
|
The usual way to get and set terminal modes is with the functions described
|
2002-10-11 01:50:16 +08:00
|
|
|
in @ref{Terminal Modes}. However, on some systems you can use the
|
2016-10-06 14:37:28 +08:00
|
|
|
BSD-derived functions in this section to do some of the same things. On
|
2012-02-28 22:44:20 +08:00
|
|
|
many systems, these functions do not exist. Even with @theglibc{},
|
2000-05-01 01:56:00 +08:00
|
|
|
the functions simply fail with @code{errno} = @code{ENOSYS} with many
|
|
|
|
kernels, including Linux.
|
|
|
|
|
|
|
|
The symbols used in this section are declared in @file{sgtty.h}.
|
|
|
|
|
|
|
|
@comment termios.h
|
|
|
|
@comment BSD
|
|
|
|
@deftp {Data Type} {struct sgttyb}
|
|
|
|
This structure is an input or output parameter list for @code{gtty} and
|
|
|
|
@code{stty}.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item char sg_ispeed
|
|
|
|
Line speed for input
|
|
|
|
@item char sg_ospeed
|
|
|
|
Line speed for output
|
|
|
|
@item char sg_erase
|
|
|
|
Erase character
|
|
|
|
@item char sg_kill
|
|
|
|
Kill character
|
|
|
|
@item int sg_flags
|
|
|
|
Various flags
|
|
|
|
@end table
|
|
|
|
@end deftp
|
|
|
|
|
|
|
|
@comment sgtty.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypefun int gtty (int @var{filedes}, struct sgttyb *@var{attributes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Direct ioctl, BSD only.
|
2000-05-01 01:56:00 +08:00
|
|
|
This function gets the attributes of a terminal.
|
|
|
|
|
|
|
|
@code{gtty} sets *@var{attributes} to describe the terminal attributes
|
|
|
|
of the terminal which is open with file descriptor @var{filedes}.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment sgtty.h
|
|
|
|
@comment BSD
|
2013-02-12 06:12:47 +08:00
|
|
|
@deftypefun int stty (int @var{filedes}, const struct sgttyb *@var{attributes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Direct ioctl, BSD only.
|
2000-05-01 01:56:00 +08:00
|
|
|
|
|
|
|
This function sets the attributes of a terminal.
|
|
|
|
|
|
|
|
@code{stty} sets the terminal attributes of the terminal which is open with
|
2016-10-06 14:37:28 +08:00
|
|
|
file descriptor @var{filedes} to those described by *@var{attributes}.
|
2000-05-01 01:56:00 +08:00
|
|
|
@end deftypefun
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
@node Line Control
|
|
|
|
@section Line Control Functions
|
|
|
|
@cindex terminal line control functions
|
|
|
|
|
|
|
|
These functions perform miscellaneous control actions on terminal
|
|
|
|
devices. As regards terminal access, they are treated like doing
|
|
|
|
output: if any of these functions is used by a background process on its
|
|
|
|
controlling terminal, normally all processes in the process group are
|
|
|
|
sent a @code{SIGTTOU} signal. The exception is if the calling process
|
|
|
|
itself is ignoring or blocking @code{SIGTTOU} signals, in which case the
|
|
|
|
operation is performed and no signal is sent. @xref{Job Control}.
|
|
|
|
|
|
|
|
@cindex break condition, generating
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcsendbreak (int @var{filedes}, int @var{duration})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acunsafe{@acucorrupt{/bsd}}}
|
|
|
|
@c On Linux, this calls just one out of two ioctls; on BSD, it's two
|
|
|
|
@c ioctls with a select (for the delay only) in between, the first
|
|
|
|
@c setting and the latter clearing the break status. The BSD
|
|
|
|
@c implementation may leave the break enabled if cancelled, and threads
|
|
|
|
@c and signals may cause the break to be interrupted before requested.
|
1995-02-18 09:27:10 +08:00
|
|
|
This function generates a break condition by transmitting a stream of
|
|
|
|
zero bits on the terminal associated with the file descriptor
|
|
|
|
@var{filedes}. The duration of the break is controlled by the
|
|
|
|
@var{duration} argument. If zero, the duration is between 0.25 and 0.5
|
|
|
|
seconds. The meaning of a nonzero value depends on the operating system.
|
|
|
|
|
|
|
|
This function does nothing if the terminal is not an asynchronous serial
|
|
|
|
data port.
|
|
|
|
|
|
|
|
The return value is normally zero. In the event of an error, a value
|
1998-06-23 01:08:51 +08:00
|
|
|
of @math{-1} is returned. The following @code{errno} error conditions
|
1995-02-18 09:27:10 +08:00
|
|
|
are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal device.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
@cindex flushing terminal output queue
|
|
|
|
@cindex terminal output queue, flushing
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcdrain (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Direct ioctl.
|
1995-02-18 09:27:10 +08:00
|
|
|
The @code{tcdrain} function waits until all queued
|
|
|
|
output to the terminal @var{filedes} has been transmitted.
|
|
|
|
|
2001-05-22 01:38:30 +08:00
|
|
|
This function is a cancellation point in multi-threaded programs. This
|
Update.
1997-10-12 05:09 Ulrich Drepper <drepper@cygnus.com>
* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.
* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here. Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file. Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.
* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* locale/programs/locfile.c (locfile_read): Correct while loop.
* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.
* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
1997-10-12 05:05 Ulrich Drepper <drepper@cygnus.com>
* libc-map: Add __bzero, __mempcpy.
1997-10-10 18:51 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h
1997-10-09 10:24 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.
* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures. The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.
* nis/nis_call.c: Remove calls to the cache functions.
* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.
* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.
* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.
* nis/nis_defaults.c: Fixed a lot of race conditions.
* nis/nis_free.c: Rewritten.
* sunrpc/auth_des.c: Fix use of free'ed pointer.
* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache. Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
1997-10-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.
1997-10-09 05:54 Ulrich Drepper <drepper@cygnus.com>
* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer. Little optimizations.
1997-10-09 05:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-09 04:58 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.
1997-10-07 Paul Eggert <eggert@twinsun.com>
* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.
1997-10-07 18:11 Ulrich Drepper <drepper@cygnus.com>
* time/africa: Update from tzdata1997i.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.
* posix/Makefile (tests): Supply arguments to globtest.sh.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
1997-10-03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Add mempcpy, prctl.
1997-09-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/Makefile ($(objpfx)mtrace): Fix typo.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.
* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.
* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.
1997-09-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/m68020/bits/string.h: New file.
1997-10-07 04:27 Richard Henderson <rth@cygnus.com>
* Makeconfig (+includes): Add -I$(objpfx).
* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp. Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
1997-10-06 21:01 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.
1997-10-06 19:35 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
1997-10-06 01:09 Zack Weinberg <zack@rabi.phys.columbia.edu>
* time/README: Correct list of files from tzcode package. Add
contact information for tzcode/tzdata maintainers. Correct
spelling of author's name. Compact lists.
1997-10-06 01:48 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.
* string/tester.c: Correct strsep test.
* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.
* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.
* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise. Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately. Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file. Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.
* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.
* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.
* posix/exevp.c: Don't use nested function.
* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file. SysV/i386 API definitions.
* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
* sysdeps/i386/setjmp.h: Make `here` label local.
* sysdeps/i386/elf/start.S: Define _fp_hw "variable".
* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/unix/sysv/i386/i686/time.S: New file.
1997-10-03 20:56 Jason Merrill <jason@yorick.cygnus.com>
* malloc/obstack.h (obstack_empty_p): New macro.
1997-10-04 17:41 Philip Blundell <Philip.Blundell@pobox.com>
* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
1997-09-30 Zack Weinberg <zack@rabi.phys.columbia.edu>
* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.
1997-09-30 17:29 Richard Henderson <rth@cygnus.com>
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.
1997-10-12 12:05:44 +08:00
|
|
|
is a problem if the thread allocates some resources (like memory, file
|
|
|
|
descriptors, semaphores or whatever) at the time @code{tcdrain} is
|
|
|
|
called. If the thread gets canceled these resources stay allocated
|
|
|
|
until the program ends. To avoid this calls to @code{tcdrain} should be
|
2001-05-22 01:38:30 +08:00
|
|
|
protected using cancellation handlers.
|
Update.
1997-10-12 05:09 Ulrich Drepper <drepper@cygnus.com>
* libio/Makefile (routines): Remove iofprintf.
* stdio-common/fprintf.c [USE_IN_LIBIO]: Define _IO_fprintf.
* libio/filedoalloc.c: Use _G_stat64 instead of stat.
* libio/fileops.c (_IO_file_open): Change to take extra argument
indicating whether 32 or 64 bit mode is wanted.
* libio/iofopen.c: Call _IO_file_open with extra argument set to 0.
* libio/iofopen64.c: Call _IO_file_open with extra argument set to 0.
* libio/iolibio.h (_IO_freopen, _IO_freopen64): Likewise.
* libio/iofgetpos.c: Pretty print.
* libio/iofgetpos64.c: Use _IO_fpos64_t for local variable `pos'.
* manual/conf.texi: Document all the _SC_ and _CS_ constants.
* manual/creature.texi: Document _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE
and _FILE_OFFSET_BITS.
* manual/llio.texi: Document truncate and ftruncate.
* manual/stdio.texi: Document positional parameters for printf.
* math/Makefile (headers): Add tgmath.h.
(libm-support): Remove s_lrint, s_llrint, s_lround, and s_llround and
move to ...
(libm-calls): ... here. Add scalbln, s_nextafterx and s_fma.
* math/libm-test.c (lround_test, llround_test): Test for all FP formats
by using FUNC().
* math/libm.map: Add fma, fmaf, fmal, nextafterx, nextafterxf,
nextafterxl, scalbln, scalblnf, scalblnl, lrintf, lrintl, llrintf,
llrintl, lroundf, lroundl, llroundf, and llroundl.
* math/math.h: Document new platform specific macros from mathdef.h.
Remove declaration of lrint, llrint, lround, and llround.
* math/test-double.c: Define TEST_DOUBLE.
* math/test-idouble.c: Likewise.
* math/test-float.c: Define TEST_FLOAT.
* math/test-ifloat.c: Likewise.
* math/tgmath.h: New file.
* math/bits/mathcalls.h: Add nextafterx, scalbln, fma, lrint, llrint,
lround, and llround.
Change second argument of scalbn to `int'.
* sysdeps/libm-ieee754/s_fma.S: New file.
* sysdeps/libm-ieee754/s_fmaf.S: New file.
* sysdeps/libm-ieee754/s_fmal.S: New file.
* sysdeps/libm-i387/s_fma.S: New file.
* sysdeps/libm-i387/s_fmaf.S: New file.
* sysdeps/libm-i387/s_fmal.S: New file.
* sysdeps/libm-i387/s_llrint.S: Change to take double argument.
* sysdeps/libm-i387/s_lrint.S: Likewise.
* sysdeps/libm-i387/s_llrintf.S: New file.
* sysdeps/libm-i387/s_llrintl.S: New file.
* sysdeps/libm-i387/s_lrintf.S: New file.
* sysdeps/libm-i387/s_lrintl.S: New file.
* sysdeps/libm-ieee754/s_llrint.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lrint.c: Likewise.
* sysdeps/libm-ieee754/s_llrintf.S: New file.
* sysdeps/libm-ieee754/s_llrintl.S: New file.
* sysdeps/libm-ieee754/s_lrintf.S: New file.
* sysdeps/libm-ieee754/s_lrintl.S: New file.
* sysdeps/libm-i387/s_scalbln.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnf.c: New file. Empty file.
* sysdeps/libm-i387/s_scalblnl.c: New file. Empty file.
* sysdeps/libm-i387/s_scalbn.c: Add scalbln as alias.
* sysdeps/libm-i387/s_scalbnf.c: Add scalblnf as alias.
* sysdeps/libm-i387/s_scalbnl.c: Add scalblnl as alias.
* sysdeps/libm-ieee754/s_llround.c: Remove version which works on
80bit double.
* sysdeps/libm-ieee754/s_lround.c: Likewise.
* sysdeps/libm-ieee754/s_llroundf.c: Likewise.
* sysdeps/libm-ieee754/s_llroundl.c: Likewise.
* sysdeps/libm-ieee754/s_lroundf.c: Likewise.
* sysdeps/libm-ieee754/s_lroundl.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Add alias fo nextafterxl.
* sysdeps/libm-ieee754/s_nextafterx.c: New file.
* sysdeps/libm-ieee754/s_nextafterxf.c: New file.
* sysdeps/libm-ieee754/s_nextafterxl.c: New file.
* sysdeps/libm-ieee754/s_scalbln.c: New file.
* sysdeps/libm-ieee754/s_scalblnf.c: New file.
* sysdeps/libm-ieee754/s_scalblnl.c: New file.
* sysdeps/libm-ieee754/s_scalbn.c: Change to take `int' as second arg.
* sysdeps/libm-ieee754/s_scalbnf.c: Likewise.
* sysdeps/libm-ieee754/s_scalbnl.c: Likewise.
* stdlib/stdlib.h: Protect declarations of __strto*l_internal functions
by #ifdefs since they are duplicated in inttypes.h.
* sysdeps/wordsize-32/inttypes.h: Add definition of strtoimax and
strtoumax plus needed declarations.
* sysdeps/generic/confname.h (_SC_AIO_LISTIO_MAX): Fix typo.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* locale/programs/locfile.c (locfile_read): Correct while loop.
* db2/makedb.c (main): Add missing parameter for error output.
(process_input): Likewise.
* resolv/gethnamaddr.c (getanswer): Rewrite a bit to avoid warning.
1997-10-12 05:05 Ulrich Drepper <drepper@cygnus.com>
* libc-map: Add __bzero, __mempcpy.
1997-10-10 18:51 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/bits/ioctls.h: Remove dependencies
on kernel_termios.h
1997-10-09 10:24 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
Add the changes from the Solaris 2.6 header files, use the new public
defines/functions.
* nis/nis_addmember.c: Updated.
* nis/nis_checkpoint.c: Updated.
* nis/nis_creategroup.c: updated.
* nis/nis_destroygroup.c: Updated.
* nis/nis_getservlist.c: Updated.
* nis/nis_ismember.c: Updated.
* nis/nis_lookup.c: Updated.
* nis/nis_modify.c: Updated.
* nis/nis_ping.c: Updated.
* nis/nis_print.c: Updated.
* nis/nis_print_group_entry.c: Updated.
* nis/nis_remove.c: Updated.
* nis/nis_removemember.c: Updated.
* nis/nis_xdr.c: Updated.
* nis/nss_nisplus/nisplus-alias.c: Updated.
* nis/nss_nisplus/nisplus-ethers.c: Updated.
* nis/nss_nisplus/nisplus-hosts.c: Updated.
* nis/nss_nisplus/nisplus-network.c: Updated.
* nis/nss_nisplus/nisplus-parser.c: Updated.
* nis/nss_nisplus/nisplus-proto.c: Updated.
* nis/nss_nisplus/nisplus-rpc.c: Updated.
* nis/nss_nisplus/nisplus-service.c: Updated.
* nis/rpcsvc/nis.h: Updated.
* nis/rpcsvc/nis.x: Updated.
* nis/rpcsvc/nis_object.x: Updated.
* nis/rpcsvc/nis_tags.h: Updated.
* nis/rpcsvc/nislib.h: Updated.
* nis/lckcache.c: Removed, since Sun has dropped the directory
signatures. The old cache version is now a security risk and not
longer supported by Sun.
* nis/nis_cache.c: Likewise.
* nis/rpcsvc/nis_cache.h: Likewise.
* nis/rpcsvc/nis_cache.x: Likewise.
* nis/nis_call.c: Remove calls to the cache functions.
* nis/libnsl.map: Remove cache and depending functions.
* nis/nis_intern.h: Likewise.
* nis/nis_add.c: Remove #include <rpcsvc/nislib.h>.
* nis/nis_domain_of.c: Likewise.
* nis/nis_domain_of_r.c: Likewise.
* nis/nis_error.c: Likewise.
* nis/nis_file.c: Likewise.
* nis/nis_local_names.c: Likewise.
* nis/nis_mkdir.c: Likewise.
* nis/nis_rmdir.c: Likewise.
* nis/nis_subr.c: Likewise.
* nis/nis_verifygroup.c: Likewise.
* nis/nis_clone.c: Removed, replaced by ...
* nis/nis_clone_dir.c: New.
* nis/nis_clone_obj.c: New.
* nis/nis_clone_res.c: New.
* nis/nis_table.c: Fixed bugs shown through the new clone functions.
* nis/nis_defaults.c: Fixed a lot of race conditions.
* nis/nis_free.c: Rewritten.
* sunrpc/auth_des.c: Fix use of free'ed pointer.
* nis/Makefile (libnsl-routines): Remove nis_clone, nis_cache and
lckcache. Add nis_clone_dir, nis_clone_obj, and nis_clone_res.
1997-10-09 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* wctype/test_wctype.c (TEST): Add parens to avoid ambiguity.
1997-10-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* include/features.h: Don't crash if _XOPEN_SOURCE is defined to
be empty.
1997-10-09 05:54 Ulrich Drepper <drepper@cygnus.com>
* nss/digits_dots.c: Place `result' in resbuf and not in `buffer'.
* nss/getXXbyYY_r.c: Make sure digits_dots.c sees `resbuf' as
struct and not a pointer. Little optimizations.
1997-10-09 05:00 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getenv.c: Remove unused file.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/stub/morecore.c: Likewise.
* sysdeps/stub/putenv.c: Likewise.
* sysdeps/stub/sbrk.c: Likewise.
* sysdeps/stub/setenv.c: Likewise.
* sysdeps/stub/sysd-stdio.c: Likewise.
* sysdeps/stub/sysdep.h: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
1997-10-09 04:58 Ulrich Drepper <drepper@cygnus.com>
* configure.in: Add __bzero definition to DWARF2 unwind test.
Reported by David S. Miller <davem@caip.rutgers.edu>.
1997-10-07 Paul Eggert <eggert@twinsun.com>
* intl/loadmsgcat.c (_nl_load_domain):
Fix &&/|| typo when checking file size.
Check for overflow when stuffing off_t into size_t.
1997-10-07 18:11 Ulrich Drepper <drepper@cygnus.com>
* time/africa: Update from tzdata1997i.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* posix/globtest.sh: Add arguments for name of dynamic linker and
call dynamic linker to execute globtest.
* posix/Makefile (tests): Supply arguments to globtest.sh.
1997-10-07 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* nis/rpcsvc/ypupd.h: Add missing __END_DECLS.
1997-10-03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Add mempcpy, prctl.
1997-09-30 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/memcmp.c: Avoid warnings.
* sysdeps/generic/memset.c: Likewise.
* sysdeps/generic/strchr.c: Likewise.
* sysdeps/generic/strlen.c: Likewise.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/Makefile ($(objpfx)mtrace): Fix typo.
1997-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix last change.
The R_68K_GLOB_DAT and R_68K_JMP_SLOT relocations really ignore
the addend, Richard.
(elf_machine_fixup_plt): Don't add the addend.
(elf_machine_plt_value): New function.
* sysdeps/alpha/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/powerpc/dl-machine.h (elf_machine_plt_value): New
function.
* sysdeps/i386/dl-machine.h (elf_machine_plt_value): New
function.
* elf/dl-runtime.c (fixup, profile_fixup): Don't add in the
addend, instead let the machine dependent setup decide.
1997-09-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/m68020/bits/string.h: New file.
1997-10-07 04:27 Richard Henderson <rth@cygnus.com>
* Makeconfig (+includes): Add -I$(objpfx).
* stdlib/longlong.h [__sparc__]: Prototype __udiv_qrnnd.
* sysdeps/alpha/setjmp.S: __setjmp is the same as _setjmp. Make
the former a strong symbol and the later a weak alias.
* sysdeps/sparc/sparc32/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S: Likewise.
1997-10-06 21:01 David S. Miller <davem@tanya.rutgers.edu>
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Make ino_t
64-bits.
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h: Make st_ino
member 64-bits as well, to match the kernel.
1997-10-06 19:35 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/sparc/sparc64/sub_n.S: Fix typo.
Patch by Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>.
1997-10-06 01:09 Zack Weinberg <zack@rabi.phys.columbia.edu>
* time/README: Correct list of files from tzcode package. Add
contact information for tzcode/tzdata maintainers. Correct
spelling of author's name. Compact lists.
1997-10-06 01:48 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h: Remove hook definition without caller argument.
* malloc/malloc.c: Likewise.
* string/tester.c: Correct strsep test.
* string/bits/string2.h: Define __string2_1bptr_p and use it.
Patch by David S. Miller <davem@tanya.rutgers.edu>.
* math/Makefile (routines): Add s_clog10.
* math/libm-test.c: Add test for clog10.
* math/libm.map: Add clog10{,f,l}.
* math/bits/cmathcalls.h [__USE_GNU]: Add clog10.
* sysdeps/libm-ieee754/s_clog10.c: New file.
* sysdeps/libm-ieee754/s_clog10f.c: New file.
* sysdeps/libm-ieee754/s_clog10l.c: New file.
* manual/math.texi: Describe clog10.
* config.h.in: Add USE_REGPARMS and define internal_function based on
this.
* configure.in: Define USE_REGPARMS for ix86 machines.
* gmon/gmon.c: Mark write_hist, write_call_graph and write_bb_counts
as internal functions.
* inet/getnameinfo.c: Likewise for nrl_domainname.
* inet/getnetgrent_r.c: Likewise for __internal_setnetgrent_reuse.
* inet/rcmd.c: Likewise for __icheckhost.
* intl/dcgettext.c: Likewise for category_to_name and
guess_category_value.
* intl/localealias.c: Likewise for read_alias_file.
* io/fts.c: Likewise for fts_alloc, fts_build, fts_lfree,
fts_maxarglen, fts_padjust, fts_palloc, fts_sort, and fts_stat.
* libio/genops.c: Likewise for save_for_backup.
* malloc/malloc.c (chunk_free, chunk_alloc, chunk_realloc, chunk_align,
main_trim, heap_trim): Likewise.
* malloc/mtrace.c (tr_where): Likewise.
* misc/fstab.c (mnt2fs): Likewise.
* misc/getttyent.c (skip, value): Likewise.
* misc/syslog.c (openlog_internal): Likewise.
* misc/tsearch.c (trecurse, tdestroy_internal): Likewise.
* nss/nsswitch.c (nss_lookup_function, nss_parse_file, nss_getline,
nss_parse_service_list, nss_new_service): Likewise.
* posix/wordexp.c (parse_dollars, parse_backtick, eval_expr): Likewise.
* resolv/inet_ntop.c (inet_ntop4, inet_ntop6): Likewise.
* resolv/inet_pton.c (inet_pton4, inet_pton6): Likewise.
* resolv/res_init.c (res_setoptions): Likewise.
* stdio-common/printf_fp.c (group_number): Likewise.
* stdio-common/vfprintf.c (buffered_vfprintf, group_number): Likewise.
* stdlib/fmtmsg.c (internal_addseverity): Likewise.
* sunrpc/auth_des.c (synchronize): Likewise.
* sunrpc/auth_unix.c (marshal_new_auth): Likewise.
* sunrpc/clnt_perr.c (auth_errmsg): Likewise.
* sunrpc/key_call.c (key_call): Likewise.
* sunprc/pmap_rmt.c (getbroadcastnets): Likewise.
* sunrpc/svc_tcp.c (makefd_xprt): Likewise.
* sunrpc/svcauth_des.c (cache_init, cache_spot, cache_ref, invalidate):
Likewise.
* sunrpc/xdr_rec.c (fix_buf_size, skip_input_bytes, flush_out,
set_input_fragment, get_input_bytes): Likewise.
* sysdeps/unix/sysv/linux/getsysstats.c (get_proc_path,
phys_pages_info): Likewise.
* sysdeps/unix/sysv/linux/if_index.c (opensock): Likewise.
* sysdeps/unix/sysv/linux/poll.c (__emulate_poll): Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_readv_replacement):
Likewise.
* sysdeps/unix/sysv/linux/readv.c (__atomic_writev_replacement):
Likewise.
* time/strptime.c (strptime_internal): Likewise.
* time/tzfile.c (find_transition, compute_tzname_max): Likewise.
* time/tzset.c (compute_change, tz_compute, tzset_internal): Likewise.
* libc.map: Remove _libio_using_thunks, add _fp_hw and _dl_addr.
* ctype/ctype.h: Pretty print.
* grp/grp.h: Likewise.
* include/libc-symbols.h: Likewise.
* include/limits.h: Likewise.
* include/values.h: Likewise.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* libio/stdio.h: Likewise.
* malloc/malloc.h: Likewise.
* misc/err.h: Likewise.
* misc/regexp.h: Likewise.
* misc/sys/cdefs.h: Likewise.
* misc/sys/file.h: Likewise.
* posix/sys/utsname.h: Likewise.
* posix/sys/wait.h: Likewise.
* pwd/pwd.h: Likewise.
* resolv/netdb.h: Likewise.
* signal/signal.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/endian.h: Likewise.
* string/memory.h: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h: Likewise.
* sysdeps/mach/hurd/sys/param.h: Likewise.
* sysdeps/unix/sysv/linux/sys/param.h: Likewise.
* termios/termios.h: Likewise.
* wcsmbs/wchar.h: Likewise.
* wctype/wctype.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/wait3.c: Use __WAIT_STATUS in definition.
Implement Large File Support API.
* include/features.h: Add suuport for _LARGEFILE_SOURCE,
_LARGEFILE64_SOURCE, and _FILE_OFFSET_BITS.
* libc.map: Add new functions for LFS.
* dirent/Makefile (routines): Add readdir64 and readdir64_r.
* dirent/dirent.h: Update readdir prototype for LFS and add new
prototypes for above functions.
* io/Makefile (routines): Add xstat64, fxstat64, lxstat64,
statfs64, fstatfs64, lstat64, open64, lseek64, creat64, and ftw64.
* io/creat64.c: New file.
* io/fstat64.c: New file.
* io/lstat64.c: New file.
* io/stat64.c: New file.
* io/ftw64.c: New file.
* io/ftw.c: Rewrite to allow easy definition of ftw64.
* io/ftw.h: Add LFS interface.
* io/fcntl.h: Likewise.
* io/sys/stat.h: Likewise.
* io/sys/statfs.h: Likewise.
* libio/Makefile (routines): Add iofgetpos64, iofopen64, iofsetpos64,
freopen64, fseeko64, and ftello64.
* libcio/fseeko64.c: New file.
* libio/ftello64.c: New file.
* libio/iofgetpos64.c: New file.
* libio/iofopen64.c: New file.
* libio/iofsetpos64.c: New file.
* libio/fileops.c (_IO_file_fopen): Change to use _IO_off64_t.
(_IO_file_attach): Likewise.
(_IO_do_write): Likewise.
(_IO_file_sync): Likewise.
(_IO_file_seek): Likewise.
(_IO_file_seekoff): Likewise. Use _G_stat64.
(_IO_file_fopen64): New function.
(_IO_file_jumps): Initialize showmanyc and imbue.
* libio/genops.c (_IO_default_seekpos): Change to use _IO_fpos64_t.
(_IO_default_seekoff): Likewise.
(_IO_default_seek): Likewise.
(_IO_default_showmanyc, _IO_default_imbue): New functions.
* libio/iofopncook.c (_IO_cookie_seek): Change to use _IO_off64_t.
* libio/iolibio.h: Add prototypes for LFS functions.
* libio/ioseekoff.c: Change to use _IO_fpos64_t.
* libio/ioseekpos.c: Likewise.
* libio/libio.h: Define _IO_fpos64_t and _IO_off64_t.
(_IO_FILE): Move _offset field to end and change type to _IO_off64_t.
(_IO_seekoff, _IO_seekpos): Change prototype.
* libio/libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Change
to use _IO_off64_t.
Change prototypes for function from the *ops.c files.
* libio/stdio.h: Add LFS interface definition.
* libio/strops.c (_IO_str_seekoff): Change to use _IO_fpos64_t.
* posix/Makefile (routines): Add pread64 and pwrite64.
* posix/confstr.c: Handle _CS_LFS* requests.
* posix/getconf.c: Handle LFS* requests.
* sysdeps/generic/confname.h: Add _CS_LFS* constants.
* posix/unistd.h: Document _LFS64_LARGEFILE and _LFS64_STDIO.
Define off_t and off64_t appropriately. Change prototypes of
LFS functions.
* posix/sys/types.h: Add LFS types.
* resources/Makefile (routines): Add getrlimit64 and setlimit64.
* resource/sys/resource.h: Change prototypes of LFS functions.
* stdio-common/Makefile (routines): Add tmpfile64.
* stdio-common/tmpfile64.c: New file.
* sysdeps/generic/_G_config.h: Define _G_fpos64_t and _G_off64_t.
Define _G_OPEN64, _G_LSEEK64, _G_FSTAT64.
* sysdeps/unix/sysv/linux/_G_config.h: Likewise.
* sysdeps/generic/bits/resource.h: Add LFS definitions.
* sysdeps/unix/bsd/sun/sunos4/bits/resource.h: Likewise.
* sysdeps/unix/sysv/linux/bits/resource.h: Likewise.
* sysdeps/generic/statfs.h: Use __fsblkcnt_t for some of the fields.
* sysdeps/unix/sysv/linux/bits/statfs.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
* sysdeps/generic/types.h: Define LFS types.
* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise.
* sysdeps/generic/sys/mman.h: Add LFS definitions.
* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
* sysdeps/generic/mach/hurd/bits/fcntl.h: Add flock LFS extensions.
* sysdeps/unix/bsd/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
* sysdeps/generic/mach/hurd/bits/stat.h: Add stat LFS extensions.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/osf/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/i386/bits/stat.h: Likewise.
* sysdeps/unix/sysv/sysv4/solaris2/bits/stat.h: Likewise.
* sysdeps/posix/open64.c: New file.
* sysdeps/stub/fstatfs64.c: New file.
* sysdeps/stub/fxstat64.c: New file.
* sysdeps/stub/getrlimit64.c: New file.
* sysdeps/stub/lseek64.c: New file.
* sysdeps/stub/lxstat64.c: New file.
* sysdeps/stub/open64.c: New file.
* sysdeps/stub/pread64.c: New file.
* sysdeps/stub/pwrite64.c: New file.
* sysdeps/stub/readdir64.c: New file.
* sysdeps/stub/readdir64_r.c: New file.
* sysdeps/stub/setrlimit64.c: New file.
* sysdeps/stub/statfs64.c: New file.
* sysdeps/stub/xstat64.c: New file.
* sysdeps/unix/sysv/linux/llseek.c: Define as __llseek and make
llseek and lseek64 weak aliases.
* sysdeps/unix/sysv/linux/lseek64.c: New file. Empty.
* sysdeps/unix/sysv/linux/alpha/bits/dirent.h: New file.
* sysdeps/unix/sysv/linux/bits/dirent.h: Add LFS definitions.
* sysdeps/posix/tempname.c: Add extra argument to trigger use of
open64.
* sysdeps/stub/tempname.c: Likewise.
* stdio-common/tempnam.c: Call __stdio_gen_tempname with extra
argument.
* stdio-common/tmpfile.c: Likewise.
* stdio-common/tmpnam.c: Likewise.
* stdio-common/tmpnam_r.c: Likewise.
* libio/libioP.h: Add definition ofr showmanyc and imbue callbacks.
* libio/fileops.c (_IO_file_jumps): Initialize showmanyc and imbue.
* libio/iofopncook.c (_IO_cookie_jumps): Likewise.
* libio/iopopen.c (_IO_proc_jumps): Likewise.
* libio/memstream.c (_IO_mem_jumps): Likewise.
* libio/obprintf.c (_IO_obstack_jumps): Likewise.
* libio/vsnprintf.c (_IO_strn_jumps): Likewise.
* libio/strops.c (_IO_str_jumps): Likewise.
* manual/arith.texi: Add a few words why cabs should be used.
* manual/llio.texi: Describe sync, fsync, fdatasync.
Tell about cleanup handlers & fcntl,lseek,write,read,close,open.
* manual/process.texi: Tell about cleanup handlers & system,waitpid,
wait.
* manual/signal.texi: Likewise for pause.
* manual/terminal.texi: Likewise for tcdrain.
* manual/time.texi: Document nanosleep.
* posix/exevp.c: Don't use nested function.
* stdlib/ucontext.h: New file.
* sysdeps/i386/sys/ucontext.h: New file. SysV/i386 API definitions.
* sunrpc/xcrypt.c (hexval): Make a macro for efficiency.
* sysdeps/i386/setjmp.h: Make `here` label local.
* sysdeps/i386/elf/start.S: Define _fp_hw "variable".
* sysdeps/stub/fstatfs.c: Correct warning.
* sysdeps/stub/fxstat.c: Likewise.
* sysdeps/stub/lxstat.c: Likewise.
* sysdeps/unix/sysv/i386/i686/time.S: New file.
1997-10-03 20:56 Jason Merrill <jason@yorick.cygnus.com>
* malloc/obstack.h (obstack_empty_p): New macro.
1997-10-04 17:41 Philip Blundell <Philip.Blundell@pobox.com>
* inet/getnameinfo.c (getnameinfo): Remove spurious `#if INET6'.
1997-09-30 Zack Weinberg <zack@rabi.phys.columbia.edu>
* maint.texi: Add copyright terms for libdb (Sleepycat, Harvard).
Document new --with-binutils switch; delete reference to
--with-gnu-as, --with-gnu-ld, --with-gnu-binutils.
Add to description of --without-fp: a kernel FPU emulator
is adequate (from FAQ)
* INSTALL: Regenerated.
1997-09-30 17:29 Richard Henderson <rth@cygnus.com>
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Move
_dl_hwcap declaration to ...
(elf_machine_fixup_plt): ... here.
1997-10-12 12:05:44 +08:00
|
|
|
@c ref pthread_cleanup_push / pthread_cleanup_pop
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
The return value is normally zero. In the event of an error, a value
|
1998-06-23 01:08:51 +08:00
|
|
|
of @math{-1} is returned. The following @code{errno} error conditions
|
1995-02-18 09:27:10 +08:00
|
|
|
are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal device.
|
|
|
|
|
|
|
|
@item EINTR
|
|
|
|
The operation was interrupted by delivery of a signal.
|
|
|
|
@xref{Interrupted Primitives}.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
@cindex clearing terminal input queue
|
|
|
|
@cindex terminal input queue, clearing
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcflush (int @var{filedes}, int @var{queue})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c Direct ioctl.
|
1995-02-18 09:27:10 +08:00
|
|
|
The @code{tcflush} function is used to clear the input and/or output
|
|
|
|
queues associated with the terminal file @var{filedes}. The @var{queue}
|
|
|
|
argument specifies which queue(s) to clear, and can be one of the
|
|
|
|
following values:
|
|
|
|
|
|
|
|
@c Extra blank lines here make it look better.
|
|
|
|
@table @code
|
|
|
|
@vindex TCIFLUSH
|
|
|
|
@item TCIFLUSH
|
|
|
|
|
|
|
|
Clear any input data received, but not yet read.
|
|
|
|
|
|
|
|
@vindex TCOFLUSH
|
|
|
|
@item TCOFLUSH
|
|
|
|
|
|
|
|
Clear any output data written, but not yet transmitted.
|
|
|
|
|
|
|
|
@vindex TCIOFLUSH
|
|
|
|
@item TCIOFLUSH
|
|
|
|
|
|
|
|
Clear both queued input and output.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
The return value is normally zero. In the event of an error, a value
|
1998-06-23 01:08:51 +08:00
|
|
|
of @math{-1} is returned. The following @code{errno} error conditions
|
1995-02-18 09:27:10 +08:00
|
|
|
are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal device.
|
|
|
|
|
|
|
|
@item EINVAL
|
|
|
|
A bad value was supplied as the @var{queue} argument.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
It is unfortunate that this function is named @code{tcflush}, because
|
|
|
|
the term ``flush'' is normally used for quite another operation---waiting
|
|
|
|
until all output is transmitted---and using it for discarding input or
|
|
|
|
output would be confusing. Unfortunately, the name @code{tcflush} comes
|
|
|
|
from POSIX and we cannot change it.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@cindex flow control, terminal
|
|
|
|
@cindex terminal flow control
|
|
|
|
@comment termios.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun int tcflow (int @var{filedes}, int @var{action})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acsafe{}}
|
|
|
|
@c Direct ioctl on Linux. On BSD, the TCO* actions are a single ioctl,
|
|
|
|
@c whereas the TCI actions first call tcgetattr and then write to the fd
|
|
|
|
@c the c_cc character corresponding to the action; there's a window for
|
|
|
|
@c another thread to change the xon/xoff characters.
|
1995-02-18 09:27:10 +08:00
|
|
|
The @code{tcflow} function is used to perform operations relating to
|
|
|
|
XON/XOFF flow control on the terminal file specified by @var{filedes}.
|
|
|
|
|
|
|
|
The @var{action} argument specifies what operation to perform, and can
|
|
|
|
be one of the following values:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@vindex TCOOFF
|
|
|
|
@item TCOOFF
|
|
|
|
Suspend transmission of output.
|
|
|
|
|
|
|
|
@vindex TCOON
|
|
|
|
@item TCOON
|
|
|
|
Restart transmission of output.
|
|
|
|
|
|
|
|
@vindex TCIOFF
|
|
|
|
@item TCIOFF
|
|
|
|
Transmit a STOP character.
|
|
|
|
|
|
|
|
@vindex TCION
|
|
|
|
@item TCION
|
|
|
|
Transmit a START character.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
For more information about the STOP and START characters, see @ref{Special
|
|
|
|
Characters}.
|
|
|
|
|
|
|
|
The return value is normally zero. In the event of an error, a value
|
1998-06-23 01:08:51 +08:00
|
|
|
of @math{-1} is returned. The following @code{errno} error conditions
|
1995-02-18 09:27:10 +08:00
|
|
|
are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@vindex EBADF
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} is not a valid file descriptor.
|
|
|
|
|
|
|
|
@vindex ENOTTY
|
|
|
|
@item ENOTTY
|
|
|
|
The @var{filedes} is not associated with a terminal device.
|
|
|
|
|
|
|
|
@vindex EINVAL
|
|
|
|
@item EINVAL
|
|
|
|
A bad value was supplied as the @var{action} argument.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@node Noncanon Example
|
|
|
|
@section Noncanonical Mode Example
|
|
|
|
|
|
|
|
Here is an example program that shows how you can set up a terminal
|
|
|
|
device to read single characters in noncanonical input mode, without
|
|
|
|
echo.
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
@include termios.c.texi
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
This program is careful to restore the original terminal modes before
|
|
|
|
exiting or terminating with a signal. It uses the @code{atexit}
|
|
|
|
function (@pxref{Cleanups on Exit}) to make sure this is done
|
|
|
|
by @code{exit}.
|
|
|
|
|
|
|
|
@ignore
|
|
|
|
@c !!!! the example doesn't handle any signals!
|
|
|
|
The signals handled in the example are the ones that typically occur due
|
|
|
|
to actions of the user. It might be desirable to handle other signals
|
|
|
|
such as SIGSEGV that can result from bugs in the program.
|
|
|
|
@end ignore
|
|
|
|
|
|
|
|
The shell is supposed to take care of resetting the terminal modes when
|
|
|
|
a process is stopped or continued; see @ref{Job Control}. But some
|
|
|
|
existing shells do not actually do this, so you may wish to establish
|
|
|
|
handlers for job control signals that reset terminal modes. The above
|
|
|
|
example does so.
|
1998-06-23 01:08:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
@node Pseudo-Terminals
|
|
|
|
@section Pseudo-Terminals
|
|
|
|
@cindex pseudo-terminals
|
|
|
|
|
|
|
|
A @dfn{pseudo-terminal} is a special interprocess communication channel
|
1998-06-23 17:16:39 +08:00
|
|
|
that acts like a terminal. One end of the channel is called the
|
1998-06-23 01:08:51 +08:00
|
|
|
@dfn{master} side or @dfn{master pseudo-terminal device}, the other side
|
1998-06-23 17:16:39 +08:00
|
|
|
is called the @dfn{slave} side. Data written to the master side is
|
1998-06-23 01:08:51 +08:00
|
|
|
received by the slave side as if it was the result of a user typing at
|
|
|
|
an ordinary terminal, and data written to the slave side is sent to the
|
|
|
|
master side as if it was written on an ordinary terminal.
|
|
|
|
|
|
|
|
Pseudo terminals are the way programs like @code{xterm} and @code{emacs}
|
|
|
|
implement their terminal emulation functionality.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Allocation:: Allocating a pseudo terminal.
|
|
|
|
* Pseudo-Terminal Pairs:: How to open both sides of a
|
|
|
|
pseudo-terminal in a single operation.
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Allocation
|
|
|
|
@subsection Allocating Pseudo-Terminals
|
|
|
|
@cindex allocating pseudo-terminals
|
|
|
|
|
|
|
|
@pindex stdlib.h
|
1998-06-23 17:16:39 +08:00
|
|
|
This subsection describes functions for allocating a pseudo-terminal,
|
1998-06-23 01:08:51 +08:00
|
|
|
and for making this pseudo-terminal available for actual use. These
|
|
|
|
functions are declared in the header file @file{stdlib.h}.
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment GNU
|
|
|
|
@deftypefun int getpt (void)
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
|
|
|
|
@c On BSD, tries to open multiple potential pty names, returning on the
|
|
|
|
@c first success. On Linux, try posix_openpt first, then fallback to
|
|
|
|
@c the BSD implementation. The posix implementation opens the ptmx
|
|
|
|
@c device, checks with statfs that /dev/pts is a devpts or that /dev is
|
|
|
|
@c a devfs, and returns the fd; static variables devpts_mounted and
|
|
|
|
@c have_no_dev_ptmx are safely initialized so as to avoid repeated
|
|
|
|
@c tests.
|
1998-06-23 01:08:51 +08:00
|
|
|
The @code{getpt} function returns a new file descriptor for the next
|
|
|
|
available master pseudo-terminal. The normal return value from
|
|
|
|
@code{getpt} is a non-negative integer file descriptor. In the case of
|
|
|
|
an error, a value of @math{-1} is returned instead. The following
|
|
|
|
@code{errno} conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
1999-03-15 21:40:08 +08:00
|
|
|
@item ENOENT
|
|
|
|
There are no free master pseudo-terminals available.
|
1998-06-23 01:08:51 +08:00
|
|
|
@end table
|
|
|
|
|
|
|
|
This function is a GNU extension.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment SVID, XPG4.2
|
|
|
|
@deftypefun int grantpt (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
|
|
|
|
@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c unix/grantpt:pts_name @acsuheap @acsmem
|
|
|
|
@c ptsname_internal dup ok (but this is Linux-only!)
|
|
|
|
@c memchr dup ok
|
|
|
|
@c realloc dup @acsuheap @acsmem
|
|
|
|
@c malloc dup @acsuheap @acsmem
|
|
|
|
@c free dup @acsuheap @acsmem
|
|
|
|
@c fcntl dup ok
|
|
|
|
@c getuid dup ok
|
|
|
|
@c chown dup ok
|
|
|
|
@c sysconf(_SC_GETGR_R_SIZE_MAX) ok
|
|
|
|
@c getgrnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c getgid dup ok
|
|
|
|
@c chmod dup ok
|
|
|
|
@c fork dup @aculock
|
|
|
|
@c [child]
|
|
|
|
@c setrlimit
|
|
|
|
@c dup2
|
|
|
|
@c CLOSE_ALL_FDS
|
|
|
|
@c execle
|
|
|
|
@c _exit
|
|
|
|
@c waitpid dup ok
|
|
|
|
@c WIFEXITED dup ok
|
|
|
|
@c WEXITSTATUS dup ok
|
|
|
|
@c free dup @ascuheap @acsmem
|
1998-06-23 01:08:51 +08:00
|
|
|
The @code{grantpt} function changes the ownership and access permission
|
|
|
|
of the slave pseudo-terminal device corresponding to the master
|
|
|
|
pseudo-terminal device associated with the file descriptor
|
|
|
|
@var{filedes}. The owner is set from the real user ID of the calling
|
|
|
|
process (@pxref{Process Persona}), and the group is set to a special
|
|
|
|
group (typically @dfn{tty}) or from the real group ID of the calling
|
|
|
|
process. The access permission is set such that the file is both
|
|
|
|
readable and writable by the owner and only writable by the group.
|
|
|
|
|
|
|
|
On some systems this function is implemented by invoking a special
|
|
|
|
@code{setuid} root program (@pxref{How Change Persona}). As a
|
|
|
|
consequence, installing a signal handler for the @code{SIGCHLD} signal
|
|
|
|
(@pxref{Job Control Signals}) may interfere with a call to
|
|
|
|
@code{grantpt}.
|
|
|
|
|
|
|
|
The normal return value from @code{grantpt} is @math{0}; a value of
|
|
|
|
@math{-1} is returned in case of failure. The following @code{errno}
|
|
|
|
error conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} argument is not a valid file descriptor.
|
|
|
|
|
2001-05-22 01:38:30 +08:00
|
|
|
@item EINVAL
|
1998-06-23 01:08:51 +08:00
|
|
|
The @var{filedes} argument is not associated with a master pseudo-terminal
|
|
|
|
device.
|
|
|
|
|
2001-05-22 01:38:30 +08:00
|
|
|
@item EACCES
|
1998-06-23 01:08:51 +08:00
|
|
|
The slave pseudo-terminal device corresponding to the master associated
|
|
|
|
with @var{filedes} could not be accessed.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment SVID, XPG4.2
|
|
|
|
@deftypefun int unlockpt (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
|
|
|
|
@c unlockpt @ascuheap/bsd @acsmem @acsfd
|
|
|
|
@c /bsd
|
|
|
|
@c ptsname_r dup @ascuheap @acsmem @acsfd
|
|
|
|
@c revoke ok (syscall)
|
|
|
|
@c /linux
|
|
|
|
@c ioctl dup ok
|
1998-06-23 01:08:51 +08:00
|
|
|
The @code{unlockpt} function unlocks the slave pseudo-terminal device
|
|
|
|
corresponding to the master pseudo-terminal device associated with the
|
|
|
|
file descriptor @var{filedes}. On many systems, the slave can only be
|
|
|
|
opened after unlocking, so portable applications should always call
|
|
|
|
@code{unlockpt} before trying to open the slave.
|
|
|
|
|
|
|
|
The normal return value from @code{unlockpt} is @math{0}; a value of
|
|
|
|
@math{-1} is returned in case of failure. The following @code{errno}
|
|
|
|
error conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EBADF
|
|
|
|
The @var{filedes} argument is not a valid file descriptor.
|
|
|
|
|
|
|
|
@item EINVAL
|
|
|
|
The @var{filedes} argument is not associated with a master pseudo-terminal
|
|
|
|
device.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment SVID, XPG4.2
|
|
|
|
@deftypefun {char *} ptsname (int @var{filedes})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtunsafe{@mtasurace{:ptsname}}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
|
|
|
|
@c ptsname @mtasurace:ptsname @ascuheap/bsd @acsmem @acsfd
|
|
|
|
@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd
|
1998-06-23 01:08:51 +08:00
|
|
|
If the file descriptor @var{filedes} is associated with a
|
|
|
|
master pseudo-terminal device, the @code{ptsname} function returns a
|
|
|
|
pointer to a statically-allocated, null-terminated string containing the
|
|
|
|
file name of the associated slave pseudo-terminal file. This string
|
|
|
|
might be overwritten by subsequent calls to @code{ptsname}.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment GNU
|
|
|
|
@deftypefun int ptsname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
|
|
|
|
@c ptsname_r @ascuheap/bsd @acsmem @acsfd
|
|
|
|
@c /hurd
|
|
|
|
@c term_get_peername ok
|
|
|
|
@c strlen dup ok
|
|
|
|
@c memcpy dup ok
|
|
|
|
@c /bsd
|
|
|
|
@c isatty dup ok
|
|
|
|
@c strlen dup ok
|
|
|
|
@c ttyname_r dup @ascuheap @acsmem @acsfd
|
|
|
|
@c stat dup ok
|
|
|
|
@c /linux
|
|
|
|
@c ptsname_internal ok
|
|
|
|
@c isatty dup ok
|
|
|
|
@c ioctl dup ok
|
|
|
|
@c strlen dup ok
|
|
|
|
@c itoa_word dup ok
|
|
|
|
@c stpcpy dup ok
|
|
|
|
@c memcpy dup ok
|
|
|
|
@c fxstat64 dup ok
|
|
|
|
@c MASTER_P ok
|
|
|
|
@c major ok
|
|
|
|
@c gnu_dev_major ok
|
|
|
|
@c minor ok
|
|
|
|
@c gnu_dev_minor ok
|
|
|
|
@c minor dup ok
|
|
|
|
@c xstat64 dup ok
|
|
|
|
@c S_ISCHR dup ok
|
|
|
|
@c SLAVE_P ok
|
|
|
|
@c major dup ok
|
|
|
|
@c minor dup ok
|
1998-06-23 01:08:51 +08:00
|
|
|
The @code{ptsname_r} function is similar to the @code{ptsname} function
|
|
|
|
except that it places its result into the user-specified buffer starting
|
|
|
|
at @var{buf} with length @var{len}.
|
|
|
|
|
|
|
|
This function is a GNU extension.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@strong{Portability Note:} On @w{System V} derived systems, the file
|
|
|
|
returned by the @code{ptsname} and @code{ptsname_r} functions may be
|
|
|
|
STREAMS-based, and therefore require additional processing after opening
|
|
|
|
before it actually behaves as a pseudo terminal.
|
|
|
|
@c FIXME: xref STREAMS
|
|
|
|
|
|
|
|
Typical usage of these functions is illustrated by the following example:
|
|
|
|
@smallexample
|
|
|
|
int
|
|
|
|
open_pty_pair (int *amaster, int *aslave)
|
|
|
|
@{
|
|
|
|
int master, slave;
|
2000-09-20 23:31:06 +08:00
|
|
|
char *name;
|
1998-06-23 01:08:51 +08:00
|
|
|
|
|
|
|
master = getpt ();
|
|
|
|
if (master < 0)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
if (grantpt (master) < 0 || unlockpt (master) < 0)
|
|
|
|
goto close_master;
|
|
|
|
name = ptsname (master);
|
|
|
|
if (name == NULL)
|
|
|
|
goto close_master;
|
|
|
|
|
1998-06-26 18:03:25 +08:00
|
|
|
slave = open (name, O_RDWR);
|
1998-06-23 01:08:51 +08:00
|
|
|
if (slave == -1)
|
|
|
|
goto close_master;
|
|
|
|
|
|
|
|
if (isastream (slave))
|
|
|
|
@{
|
|
|
|
if (ioctl (slave, I_PUSH, "ptem") < 0
|
|
|
|
|| ioctl (slave, I_PUSH, "ldterm") < 0)
|
|
|
|
goto close_slave;
|
|
|
|
@}
|
|
|
|
|
|
|
|
*amaster = master;
|
|
|
|
*aslave = slave;
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
close_slave:
|
|
|
|
close (slave);
|
|
|
|
|
|
|
|
close_master:
|
|
|
|
close (master);
|
|
|
|
return 0;
|
|
|
|
@}
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@node Pseudo-Terminal Pairs
|
|
|
|
@subsection Opening a Pseudo-Terminal Pair
|
|
|
|
@cindex opening a pseudo-terminal pair
|
|
|
|
|
|
|
|
These functions, derived from BSD, are available in the separate
|
|
|
|
@file{libutil} library, and declared in @file{pty.h}.
|
|
|
|
|
|
|
|
@comment pty.h
|
|
|
|
@comment BSD
|
2007-12-18 05:22:17 +08:00
|
|
|
@deftypefun int openpty (int *@var{amaster}, int *@var{aslave}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
|
|
|
|
@c openpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c getpt @acsfd
|
|
|
|
@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c unlockpt dup @ascuheap/bsd @acsmem @acsfd
|
|
|
|
@c openpty:pts_name @acsuheap @acsmem @acsfd
|
|
|
|
@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd
|
|
|
|
@c realloc dup @acsuheap @acsmem
|
|
|
|
@c malloc dup @acsuheap @acsmem
|
|
|
|
@c free dup @acsuheap @acsmem
|
|
|
|
@c open dup @acsfd
|
|
|
|
@c free dup @acsuheap @acsmem
|
|
|
|
@c tcsetattr dup ok
|
|
|
|
@c ioctl dup ok
|
|
|
|
@c strcpy dup ok
|
|
|
|
@c close dup @acsfd
|
1998-06-23 01:08:51 +08:00
|
|
|
This function allocates and opens a pseudo-terminal pair, returning the
|
|
|
|
file descriptor for the master in @var{*amaster}, and the file
|
|
|
|
descriptor for the slave in @var{*aslave}. If the argument @var{name}
|
1998-06-23 17:16:39 +08:00
|
|
|
is not a null pointer, the file name of the slave pseudo-terminal
|
1998-06-23 01:08:51 +08:00
|
|
|
device is stored in @code{*name}. If @var{termp} is not a null pointer,
|
|
|
|
the terminal attributes of the slave are set to the ones specified in
|
|
|
|
the structure that @var{termp} points to (@pxref{Terminal Modes}).
|
2016-10-06 14:37:28 +08:00
|
|
|
Likewise, if @var{winp} is not a null pointer, the screen size of
|
1998-06-23 01:08:51 +08:00
|
|
|
the slave is set to the values specified in the structure that
|
|
|
|
@var{winp} points to.
|
|
|
|
|
|
|
|
The normal return value from @code{openpty} is @math{0}; a value of
|
1999-03-15 21:40:08 +08:00
|
|
|
@math{-1} is returned in case of failure. The following @code{errno}
|
|
|
|
conditions are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item ENOENT
|
|
|
|
There are no free pseudo-terminal pairs available.
|
|
|
|
@end table
|
1998-06-23 01:08:51 +08:00
|
|
|
|
1998-06-23 17:16:39 +08:00
|
|
|
@strong{Warning:} Using the @code{openpty} function with @var{name} not
|
|
|
|
set to @code{NULL} is @strong{very dangerous} because it provides no
|
|
|
|
protection against overflowing the string @var{name}. You should use
|
|
|
|
the @code{ttyname} function on the file descriptor returned in
|
|
|
|
@var{*slave} to find out the file name of the slave pseudo-terminal
|
|
|
|
device instead.
|
1998-06-23 01:08:51 +08:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment pty.h
|
|
|
|
@comment BSD
|
2007-12-18 05:22:17 +08:00
|
|
|
@deftypefun int forkpty (int *@var{amaster}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
|
2014-02-01 13:53:15 +08:00
|
|
|
@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
|
|
|
|
@c forkpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c openpty dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
|
|
|
|
@c fork dup @aculock
|
|
|
|
@c close dup @acsfd
|
|
|
|
@c /child
|
|
|
|
@c close dup @acsfd
|
|
|
|
@c login_tty dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
|
|
|
|
@c _exit dup ok
|
|
|
|
@c close dup @acsfd
|
1998-06-23 01:08:51 +08:00
|
|
|
This function is similar to the @code{openpty} function, but in
|
1998-06-26 18:03:25 +08:00
|
|
|
addition, forks a new process (@pxref{Creating a Process}) and makes the
|
|
|
|
newly opened slave pseudo-terminal device the controlling terminal
|
|
|
|
(@pxref{Controlling Terminal}) for the child process.
|
1998-06-23 01:08:51 +08:00
|
|
|
|
|
|
|
If the operation is successful, there are then both parent and child
|
|
|
|
processes and both see @code{forkpty} return, but with different values:
|
|
|
|
it returns a value of @math{0} in the child process and returns the child's
|
|
|
|
process ID in the parent process.
|
|
|
|
|
|
|
|
If the allocation of a pseudo-terminal pair or the process creation
|
|
|
|
failed, @code{forkpty} returns a value of @math{-1} in the parent
|
|
|
|
process.
|
|
|
|
|
|
|
|
@strong{Warning:} The @code{forkpty} function has the same problems with
|
|
|
|
respect to the @var{name} argument as @code{openpty}.
|
|
|
|
@end deftypefun
|