我想在Linux系统上用C编写一个简单,愚蠢的X终端模拟器.
起初,我只是想我必须打开一个shell并显示它的输出.我检查了xterm和rxvt代码,看起来有点复杂.
首先,我必须用openpty打开一个伪终端.所以我看一下手册页,看看openpty填充了2个文件描述符,即master和slave.xterm和rxvt代码都很混乱,因为这些特殊文件的系统依赖性.
我理解termios的东西:它只是关于终端转义码的一堆信息.我真正没有得到的是:我想对主/从文件描述符做什么?
打开终端,登录,在shell上执行"ls"的示例程序将是非常棒的.
(英语不是我的母语,原谅我最终的错误)
编辑:这是我提出的示例代码:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <pty.h>
#include <utmp.h>
#include <ctype.h>
void
safe_print (char* s)
{
while(*s) {
if(*s == '\n')
putchar("\n");
else if(iscntrl(*s))
printf("\\e(%d)", *s);
else
putchar(*s);
s++;
}
}
int
main (int argc, char** argv)
{
char buf[BUFSIZ] = {0};
int master;
int ret = forkpty(&master, NULL, NULL, NULL);
if(ret == -1)
puts("no fork"), exit(0);
if(!ret) {
execl("/bin/sh", "sh", NULL);
exit(0);
}
sleep(1); /* let the shell run …Run Code Online (Sandbox Code Playgroud) 我正在试图弄清楚如何在linux中使用伪终端,基本上我想创建一个telnetd克隆,我之前在一个问题中提到过.
我理解主从终端的概念,我对如何在C中使用系统调用有了基本的把握.
我的问题涉及打开slave/master文件描述符后的下一步.如何在奴隶中推出getty?网上是否有使用forkpty(),openpty()或其他API的好资源?
C中的一些例子会有所帮助.这是一个非常相似的问题,但没有人真正提供任何例子.
在我不断尝试理解伪终端如何工作的过程中,我编写了一个小程序来尝试运行bash.
问题是,我的突破似乎是关闭的.(仅在我按回车键后才显示shell提示.)
此外,我仍然无法正常使用ncurses程序,如vi.谁能告诉我如何为此设置伪终端?
我写得很糟糕的程序可以在这里找到,我鼓励你编译它.操作系统是GNU/Linux,谢谢.
编辑:像这样编译:gcc program.c -lutil -o program
再次编辑:看起来奇怪间距的问题是由于使用printf(),但仍然没有解决ncurses程序的问题.