如何在Linux和C中使用伪终端?
我正试图弄清楚如何在linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我提到的 我理解主终端和从终端的概念,并且基本掌握了如何在C中使用系统调用 我的问题涉及打开从/主文件描述符后的下一步。如何在奴隶中启动盖蒂?网络上有什么好的资源可以使用forkpty()、openpty()或其他API吗 C语言中的一些例子会有所帮助,但是没有人真正提供任何例子。有一章介绍了Linux中可用的伪终端层。最好的部分是包含如何在Linux和C中使用伪终端?,c,linux,pty,C,Linux,Pty,我正试图弄清楚如何在linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我提到的 我理解主终端和从终端的概念,并且基本掌握了如何在C中使用系统调用 我的问题涉及打开从/主文件描述符后的下一步。如何在奴隶中启动盖蒂?网络上有什么好的资源可以使用forkpty()、openpty()或其他API吗 C语言中的一些例子会有所帮助,但是没有人真正提供任何例子。有一章介绍了Linux中可用的伪终端层。最好的部分是包含pty驱动程序的,它非常清楚地演示了如何使用pty接口。(如果您希望以编程方
pty
驱动程序的,它非常清楚地演示了如何使用pty
接口。(如果您希望以编程方式驱动纯终端程序,但不希望使用expect(1)
)您不需要为pty启动getty,那么它构建的pty程序本身就很有用。getty只是过程中的“侦听器”部分。对于硬接线终端,每个单独的终端设备都在不断地“监听”。对于telnet,守护进程执行侦听部分(在套接字上),并通过创建pty对和fork()ing/exec()ing来处理连接请求。
事实上:APUE很好地处理PTY。include
#包括
#包括
#定义_XOPEN_源
#包括
int main(int argc,字符**argv)
{
char*slavename;
int masterfd;
masterfd=打开(“/dev/ptmx”,O_RDWR);
grantpt(masterfd);
解锁(masterfd);
slavename=ptsname(masterfd);
...
}
我发布了演示伪终端主从概念的简单示例。请通过此链接了解Linux中的终端
@JérémyPouyet,感谢您的通知;我已经修复了指向第二版代码的链接(这是我熟悉的代码)——也许第三版会是更好的选择,但我还没有亲自阅读过该代码。总有一天。:)@卷尾猴巴拿馬文件六四事件法轮功, 对不起,我找不到许可证。第二版tarball和第三版tarball都没有指定许可证,网站上的常见问题解答没有指定许可证。在tarball的顶层有一个免责声明
文件,表明它是用于使用和有用的,但对所有后果不承担任何责任。是的,这也是我发现的。也许我会给作者发电子邮件,如果打开的话,一定要转到GitHub:-)kerrisk的linux编程界面也有一章介绍它:这是一个简单明了的答案。这里有记录:
#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);
...
}