2

在 C 或 bash 中,

我想知道,如果可能的话,您如何从 ssh 会话内部获取伪终端主机的文件描述符,该主机负责获取该会话的从属设备(pts)的输入。

4

3 回答 3

3

shell进程没有主文件描述符,只有从属。

shell 的父进程(无论是 sshd 还是 xterm 或 screen 等等)通过调用getpt(3)or来创建一个新的主进程posix_openpt(3)。该函数返回主文件描述符。grantpt(3)然后父进程通过调用、unlockpt(3)ptsname(3)的组合来获取从文件描述符open(2)。这适用于 Linux 和其他 POSIXized 系统,其他 *nixes 可能使用其他功能,但最终结果是相同的。父进程具有主/从文件描述符对。

然后,从属描述符和仅从属描述符作为其标准输入、输出和错误传递给 shell。

于 2012-06-30T08:56:11.447 回答
0

来自 Solaris 5.8 PTS(7D) 手册页 - STREAMS 伪 tty 从驱动程序

Only one open is allowed on a master device.

我想这回答了我的问题:)
编辑:实际上它没有,因为如果有办法获取文件描述符,我不需要再次打开,它是一个文件描述符,哈哈,不需要打开

于 2012-06-30T08:26:29.877 回答
0

在基于 unix 的系统上,您可以通过打开/dev/tty. 在许多情况下,您的程序已经将其作为标准输入、标准输出和标准错误打开,但即使您的程序正在使用标准输入、标准输出或标准错误重定向来调用,/dev/tty也会为您提供进程的控制终端。

于 2012-09-20T00:49:32.570 回答