ChatGPT解决这个技术问题 Extra ChatGPT

What do pty and tty mean?

I noticed many mentions of pty and tty in some open source projects, could someone tell me what do they mean and what is the difference between them?

One might want to read the pty(7) man page (like in this link), where pty/ttys are described as pre-created pairs of files representing master/slave end of a pseudo-terminal (see the description about BSD style).
@wangkaibule That should be an answer!

M
Manuel Jordan

tty originally meant "teletype" and "pty" means "pseudo-teletype".

In UNIX, /dev/tty* is any device that acts like a "teletype", i.e: a terminal. (Called teletype because that's what we had for terminals in those benighted days.)

A pty is a pseudotty, a device entry that acts like a terminal to the process reading and writing there, but is managed by something else. They first appeared (as I recall) for X Window and screen and the like, where you needed something that acted like a terminal but could be used from another program.


I think ptys where added to Unix primarily to support Telnet, rsh and rlogin.
@CharlieMartin What do you mean the pty is something "that acted like a terminal?" Why would we want something like that? And how does another program make use of this pty? My guess is that the pty relays commands or something to the for-real terminal (tty) for the program. Is this correct? If not, ignore my guess and please answer the first part of my comment.
Think about a terminal as an object: it connects something on one end to stdin and stdout on the other. A real TTY connects to a physical terminal. a PTY connect to a program, eg, xterm, or a command window, or a shell window. It then lies to the program and says it really is so a terminal, honest. Before PTYs you connected programs like this with pipes, but pipes have significant differences, like no flow control. PTYs appeared to solve this.
@CharlieMartin "A real TTY connects to a physical terminal". What about the Linux Console? For example, in an Ubuntu system, there are Linux Consoles on Ctrl-Alt-F{1..6} and they are connected to /dev/tty{1..6}. The Linux Console is not a physical terminal, yet it is connected to a ttyN (not to a ptyN). Am I missing something here?
Only that you pretty much can't say anything definite about LINUX that won't have a weird edge case. In this case the Linux console is a kernel feature that uses a /dev/tty dev entry but then gets connected to a bunch of things to get out to the user. en.wikipedia.org/wiki/Linux_console
M
Manuel Jordan

A tty is a terminal (it stands for teletype - the original terminals used a line printer for output and a keyboard for input!). A terminal is a basically just a user interface device that uses text for input and output.

A pty is a pseudo-terminal - it's a software implementation that appears to the attached program like a terminal, but instead of communicating directly with a "real" terminal, it transfers the input and output to another program.

For example, when you ssh in to a machine and run ls, the ls command is sending its output to a pseudo-terminal, the other side of which is attached to the SSH daemon.


Could you give a little bit more "precise" example of PTYs ? I still didn't understand where they come in, and how they even are called. Thanks
Can someone help on when and how *nix based operating system creates this pseudo terminals.
@darth_coder: They're created when an application requests one. That happens when you do things like open a new graphical terminal window or log in remotely.
@caf can you name kernel modules or daemon responsible for spawning a terminal.
@darth_coder: Any application can do so. sshd and xterm are two typical examples.
w
wnoise

tty: teletype. Usually refers to the serial ports of a computer, to which terminals were attached.

pty: pseudoteletype. Kernel provided pseudoserial port connected to programs emulating terminals, such as xterm, or screen.


n
nikolaosmparoutis

If you run the mount command with no command-line arguments, which displays the file systems mounted on your system, you’ll notice a line that looks something like this: none on /dev/pts type devpts (rw,gid=5,mode=620) This indicates that a special type of file system, devpts , is mounted at /dev/pts .This file system, which isn’t associated with any hardware device, is a “magic” file system that is created by the Linux kernel. It’s similar to the /proc file system

Like the /dev directory, /dev/pts contains entries corresponding to devices. But unlike /dev , which is an ordinary directory, /dev/pts is a special directory that is cre- ated dynamically by the Linux kernel.The contents of the directory vary with time and reflect the state of the running system. The entries in /dev/pts correspond to pseudo-terminals (or pseudo-TTYs, or PTYs).

Linux creates a PTY for every new terminal window you open and displays a corre- sponding entry in /dev/pts .The PTY device acts like a terminal device—it accepts input from the keyboard and displays text output from the programs that run in it. PTYs are numbered, and the PTY number is the name of the corresponding entry in /dev/pts .

For example, if the new terminal window’s PTY number is 7, invoke this command from another window:

echo ‘I am a virtual di ’ > /dev/pts/7

The output appears in the new terminal window. You can try to change the 7 with 1, 2 depending on the open terminals you will see the output on the other terminal window. The dev/pts is the bus(the post office) to do this!


T
Tony Barganski

A tty is a physical terminal-teletype port on a computer (usually a serial port).

A Teletype tty can also be emulated by a computer program running as a module in kernel space.

The word teletype is a shorting of the telegraph typewriter, or teletypewriter device from the 1930s - itself an electromagnetic device which replaced the telegraph encoding machines of the 1830s and 1840s.

https://i.stack.imgur.com/2EoB1.jpg

A pty is a pseudo-teletype port provided by a computer Operating System Kernel to connect user land terminal emulation software programs such as ssh, xterm, or screen.

https://i.stack.imgur.com/1exFh.png

A terminal is simply a computer's user interface that uses text for input and output.

OS Implementations

These use pseudo-teletype ports however, their naming and implementations have diverged a little.

Linux mounts a special file system devpts on /dev (the 's' presumably standing for serial) that creates a corresponding entry in /dev/pts for every new terminal window you open, e.g. /dev/pts/0

macOS/FreeBSD also use the /dev file structure however, they use a numbered TTY naming convention ttys for every new terminal window you open e.g. /dev/ttys002

Microsoft Windows still has the concept of an LPT port for Line Printer Terminals within it's Command Shell for output to a printer.


The second image you provided is a VT100 video terminal. This is still a physical TTY (albeit that TTY manufacturers in the 1970s had moved on from printers to video displays), and definitely not a PTY (terminal in software). It's worth noting that old-school video terminals like the DEC VT100 you've pictured cannot run software, let alone an OS, since they're not computers.
@dwk Well spotted regarding the VT100 video terminal. I've updated the photo.