如何从ssh会话中获取伪终端主文件描述符?

时间:2012-06-30 08:04:39

标签: c pty pts

在C或bash中,

我想知道如果可能的话,你是如何从ssh会话中获取文件描述符到伪终端主机负责获取对该会话的从属(pts)的输入。

3 个答案:

答案 0 :(得分:2)

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

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

然后,slave描述符和slave描述符作为标准输入,输出和错误传递给shell。

答案 1 :(得分:0)

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

Only one open is allowed on a master device.

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

答案 2 :(得分:0)

在基于unix的系统上,您可以打开/dev/tty打开当前进程的控制终端。在许多情况下,你的程序已经将它打开为stdin,stdout和stderr,但即使你的程序是用stdin,stdout或stderr重定向调用的,/dev/tty也会给你进程的控制终端。