Next
Previous
Contents
"tty" is an abbreviation for "Teletype". The first terminals were
Teletypes (like remotely controlled typewriters). See subsection
Teletypes. A list of Linux devices (the stuff
in the /dev directory) may be found in "Linux Allocated Devices" which
should be included with kernel sources. It "describes" what each
device used for in only a word or two but doesn't tell you how to use
them.
The computer considers each serial port to be a "device". It's
sometimes called a terminal device since at one time terminals were
the most common use for a serial port. For each such serial port
there is a special file in the /dev (device) directory. /dev/tts/0
(or /dev/ttyS0) is the special file for the serial port known as COM1
in the DOS/Windows world. The device filesystem notation: tts/0 is
replacing the older ttyS0 notation. But the older notation will be
often used in this howto since it is still widely used and often
still works (using symbolic links) on the newer device filesystems.
To send text to a terminal you may redirect standard output of some
command-line command to the appropriate special file. For example
typing "echo test > /dev/ttyS1" at the command prompt should send the
word "test" to the terminal on ttyS1 (COM2) provided you have write
permission on /dev/ttyS1. Similarly, typing "cat my_file >
/dev/ttyS0" will send the contents of the file my_file to COM1
(ttyS0).
Pseudo terminals are pairs of devices such as /dev/pty/m3
and /dev/pty/s3 (or respectively /dev/ptyp3 and /dev/ttyp3 if you're
not using the device filesystem). There is no physical device
directly associated with either of them, not even a serial port
connector. But if a program treats s3 (ttyp3) like it was a serial
port, what is read and written to that port appears on the other
member of the pair m3 (ptyp3) which another program uses to read and
write to. Thus two programs talk to each other via this method and
one program (on s3=ttyp3) thinks it's talking to a serial port. It's
something like a "pipe" between m3 and s3.
For talking to s3 (ttyp3), any program designed to talk to a serial
port will do. But for the other program that talks to m3 (ptyp3), it
must have been specially written to talk to m3. It's mainly
programmers that must concern themselves with pseudo terminals and
most users don't need to worry about them.
Here's an example: If someone connects via telnet to your computer
over a network (you are a telnet server), the part of the telnet
program handling this connection on your computer may wind up
connected to the pseudo terminal m2 (ptyp2). A getty program should
be running on the corresponding s2 (ttyp2). Getty thinks it's talking
to a terminal. When telnet gets a character from the remote client,
it goes thru m2 to s2 to getty which then sends back "login:" routed
to s2, m2, your server telnet program, and then out to the network back to
the client. Here the login program and the telnet server program talk
to each other via a "pseudo terminal". Note that there is no pseudo
terminal used on the client computer, just telnet. Of course the
server allocates a pseudo terminal (on the server) for each client.
In X Window, the terminal emulator program, xterm (or rxvt), uses
pseudo terminals. Ham radio programs under Linux also use them. By
using certain application software, it is possible to have 2 or more
pseudo terminals attached to the same physical serial port.
For a pseudo terminal pair such as m3 (ptyp3) and s3 (ttyp3), the m...
(pty...) is the master or controlling terminal and the s... (tty...)
is the slave. The device filesystem notation makes this clear (m is
for master, s is for slave). The slave is like a serial port so also
think of s as standing for "serial". In the old notation, tty.. is
like a serial port ttyS (which in olden days was just tty).
Prior to the device filesystem a complex notation was used in order
to get a large number of pseudo terminals. There are only 16 ttyp's:
ttyp0-ttypf (f is a hexadecimal digit). To get more pairs, more
letters such as q, r, s were used instead of p. For example the pair
ttys8, ptys8 was a pseudo terminal pair. Later on, even more letters
were added so as to allow even more pseudo terminals. With the device
filesystem, we may just use, for example, /dev/pty/m57 instead of
/dev/ttys9 for the 58th pty master. People have made the mistake of
typing say ttys2 (which is a pseudo serial port) when they meant to
type ttyS2 (a real serial port).
The master and slave are really the same "port" but the slave is used
by the application program and the master is used by a network program
(or the like) which supplies (and gets) data to/from the slave port.
The program using the slave port can run "as is" since it thinks it is
talking to a serial port.
Unix98 (available on Linux) doesn't use the above but instead uses a
"pty master" which might be, for example, /dev/ptm3. It's slave is
automatically created as /dev/pts/3. It thus supplies a pty on demand.
The /dev/pts directory is considered to be a file system of type
devpts and appears in the lists of mounted filesystems. While the
"file" /dev/pts/3 looks like it would be an entry in the device
filesystem, it's really a wholly different kind of filesystem.
While other unix-like systems have a manual page for pseudo terminals
(may be named "pty") Linux lacks one for the general user. But there
is a man-page for programmers: (openpty or forkpty) which assumes that
you already understand pseudo terminals. There is both a Linux pty
module and a /usr/include/pty.h file.
/dev/tty stands for the controlling terminal (if any) for the
current process. To find out which tty's are attached to which
processes use the "ps -a" command at the shell prompt (command line).
Look at the "tty" column. For the shell process you're in, /dev/tty
is the terminal you are now using. Type "tty" at the shell prompt to
see what it is (see manual pg. tty(1)). /dev/tty is something like a
link to the actually terminal device name with some additional
features for C-programmers: see the manual page tty(4).
N stands for an integer. One use of these in Linux is with the
ISDN driver package: isdn4linux. The ttyIN is something like ttySN
but it emulates a modem and can be given modem commands.
In Linux
the PC monitor is usually called the console and has several device
special files associated with it: vc/0 (tty0), vc/1 (tty1), vc/2
(tty2), etc. When you log in you are on vc/1. To go to vc/2 (on the
same screen) press down the 2 keys Alt(left)-F3. For vc/3 use Left
Alt-F3, etc. These (vc/1, vc/2, vc/3, etc.) are called "virtual
terminals". vc/0 (tty0) is just an alias for the current virtual
terminal and it's where messages from the system are sent. Thus
messages from the system will be seen on the console (monitor)
regardless of which virtual terminal it is displaying.
You may log in to different virtual terminals and thus have a few
different sessions with the computer going on at the same time. Only
the system or the root user may write to /dev/vc/0 to which
/dev/console is sometimes linked. For more info on the console see
The Linux Console.
The /dev directory comes supplied with many device special files.
If you need something that's not there you may try to create it with
the "mknod" command. See the manual page ttys(4) for how to do this
for serial ports. To use mknod you must know the major and minor
device numbers. You might be able to infer the numbers you need by
using the "ls -l " command in the /dev directory. It will display
the major and minor numbers of existing special files.
Next
Previous
Contents
|