我试图弄清楚如何在 linux 中使用伪终端,本质上我想创建一个 telnetd 克隆,我在前面的问题中提到过。
我了解主从终端的概念,并且对如何在 C 中使用系统调用有基本的掌握。
我的问题涉及打开从/主文件描述符后的下一步。如何在从站中启动 getty?网上有没有使用 forkpty()、openpty() 或其他 API 的好资源?
C 中的一些示例会有所帮助。这是一个非常相似的问题,但没有人真正提供任何示例。
我试图弄清楚如何在 linux 中使用伪终端,本质上我想创建一个 telnetd 克隆,我在前面的问题中提到过。
我了解主从终端的概念,并且对如何在 C 中使用系统调用有基本的掌握。
我的问题涉及打开从/主文件描述符后的下一步。如何在从站中启动 getty?网上有没有使用 forkpty()、openpty() 或其他 API 的好资源?
C 中的一些示例会有所帮助。这是一个非常相似的问题,但没有人真正提供任何示例。
Unix 环境中的高级编程,第 2 版有一个关于 Linux 中可用的伪终端层的精彩章节。最好的部分是包含驱动程序的源代码pty
,并且非常清楚地演示了如何使用pty
接口。(pty
如果您想以编程方式驱动仅限终端的程序但不希望使用它,它构建的程序本身就很有用expect(1)
。)
#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()ing / exec()ing 来处理连接请求。事实上:APUE 可以很好地处理 ptys。