我正在尝试弄清如何在Linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我在早期问题中提到的。
我理解主从终端的概念,并且对如何在C中使用系统调用有基本的了解。
我的问题涉及在打开从属/主文件描述符后下一步怎么办。我该如何在从属中启动getty?是否有任何关于使用forkpty()、openpty()或其他API的好资源在网络上?
一些C语言示例会有所帮助。这是一个非常类似的问题,但没有人真正提供任何示例。
我正在尝试弄清如何在Linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我在早期问题中提到的。
我理解主从终端的概念,并且对如何在C中使用系统调用有基本的了解。
我的问题涉及在打开从属/主文件描述符后下一步怎么办。我该如何在从属中启动getty?是否有任何关于使用forkpty()、openpty()或其他API的好资源在网络上?
一些C语言示例会有所帮助。这是一个非常类似的问题,但没有人真正提供任何示例。
《Unix环境高级编程》第二版中有一章非常出色的内容,介绍了Linux中可用的伪终端层。最好的部分是源代码,其中包含一个pty
驱动程序,并清晰地演示了如何使用pty
接口。(如果您想以编程方式驱动仅限于终端的程序但不想使用expect(1)
,则构建的pty
程序本身也很有用。)
#include <sys/stat.h>
#include <fcntl.h>
#define _XOPEN_SOURCE
#include <stdlib.h>
int main(int argc, char **argv)
{
char *slavename;
int masterfd;
masterfd = open("/dev/ptmx", O_RDWR);
grantpt(masterfd);
unlockpt(masterfd);
slavename = ptsname(masterfd);
...
}
我发布了一个简单的示例,演示了伪终端主从概念。请查看以下链接,以清楚理解Linux中的终端:http://www.linusakesson.net/programming/tty/
你不需要为 ptys 启动 getty。getty 只是该过程的“监听器”部分。对于硬连线终端,每个单独的终端设备都在不断地“监听”。对于 telnet,守护进程在套接字上执行监听部分,并通过创建 pty 对并 fork() / exec() 处理连接请求。
而且:APUE 很好地处理了 ptys。