如何在C语言的Linux中使用伪终端?

时间:2011-12-04 07:46:28

标签: c linux pty

我正在试图弄清楚如何在linux中使用伪终端,基本上我想创建一个telnetd克隆,我提到in an earlier question

我理解主终端的概念,我对如何在C中使用系统调用有了基本的把握。

我的问题涉及打开slave / master文件描述符后的下一步。如何在奴隶中推出getty?网上是否有使用forkpty(),openpty()或其他API的良好的资源?

C中的一些例子会有所帮助。 This was a very similar question,但没有人真正提供任何示例。

3 个答案:

答案 0 :(得分:10)

Advanced Programming in the Unix Environment, 2nd Edition有一个关于Linux中可用的伪终端层的精湛篇章。最好的部分是source code,其中包含pty驱动程序,并且非常清楚地演示了如何使用pty接口。 (如果您想以编程方式驱动仅限终端的程序但不希望使用pty,则它构建的expect(1)程序本身就很有用。)

答案 1 :(得分:4)

包括

#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/

答案 2 :(得分:0)

对于ptys,你没有 lauch a getty 。 getty只是该过程的“倾听者”部分。对于硬连线终端,每个终端设备都在不断“收听”。对于telnet,守护进程执行侦听部分(在套接字上),并通过创建 pty对和fork()ing / exec()来处理连接请求。 事实上:APUE很好地处理了ptys。