How to Obtain Pseudo Terminal Master file descriptor from inside ssh session?

StackOverflow https://stackoverflow.com/questions/11272536

  •  18-06-2021
  •  | 
  •  

in C or bash,

I was wondering how, if possible, do you obtain from inside an ssh session, the file descriptor to the pseudo terminal master responsible for getting input to that's session's slave(pts).

有帮助吗?

解决方案

The shell process has no master file descriptor, only slave.

The shell's parent process (be it sshd or xterm or screen or whatever) creates a new master by calling getpt(3) or posix_openpt(3). The function returns the master file descriptor. The parent process then obtains the slave file descriptor by calling a combination of grantpt(3), unlockpt(3), ptsname(3) and open(2). This is for Linux and other POSIXized systems, other *nixes may use other functions, but the net result is the same. The parent process has the master/slave pair of file descriptors.

The slave descriptor, and the slave descriptor only, is then passed to the shell as its standard input, output and error.

其他提示

From Solaris 5.8 PTS(7D) Man-page - STREAMS pseudo-tty slave driver

Only one open is allowed on a master device.

I guess that answers my question :)
EDIT: actually it does not, because if there is a way to obtain the file descriptor, i won't need to open again, it is a file descriptor lol , no need to open

On unix-based systems, you can open the controlling terminal of the current process by opening /dev/tty. In many cases your program will already have this open as stdin, stdout and stderr, but even if your program is being invoked with stdin, stdout or stderr redirected, /dev/tty will give you the controlling terminal of the process.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top