在C或bash中,
我想知道如果可能的话,你是如何从ssh会话中获取文件描述符到伪终端主机负责获取对该会话的从属(pts)的输入。
答案 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
也会给你进程的控制终端。