Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux和C中使用伪终端?_C_Linux_Pty - Fatal编程技术网

如何在Linux和C中使用伪终端?

如何在Linux和C中使用伪终端?,c,linux,pty,C,Linux,Pty,我正试图弄清楚如何在linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我提到的 我理解主终端和从终端的概念,并且基本掌握了如何在C中使用系统调用 我的问题涉及打开从/主文件描述符后的下一步。如何在奴隶中启动盖蒂?网络上有什么好的资源可以使用forkpty()、openpty()或其他API吗 C语言中的一些例子会有所帮助,但是没有人真正提供任何例子。有一章介绍了Linux中可用的伪终端层。最好的部分是包含pty驱动程序的,它非常清楚地演示了如何使用pty接口。(如果您希望以编程方

我正试图弄清楚如何在linux中使用伪终端,本质上我想创建一个telnetd克隆,这是我提到的

我理解主终端和从终端的概念,并且基本掌握了如何在C中使用系统调用

我的问题涉及打开从/主文件描述符后的下一步。如何在奴隶中启动盖蒂?网络上有什么好的资源可以使用forkpty()、openpty()或其他API吗

C语言中的一些例子会有所帮助,但是没有人真正提供任何例子。

有一章介绍了Linux中可用的伪终端层。最好的部分是包含
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);
...
}