Question

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).

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top