在TurboC++中,我可以使用getch()函数conio.h.但是在Linux中,gcc没有提供conio.h.我怎样才能获得功能getch()?
我目前有一个chat client与之成功通信的人a server.我应该修改行为,以便在收到另一条聊天消息时提示向下移动(即通过打印" \b擦除提示",打印消息,然后重新打印提示,将消息打印在提示"上方" .
我们获得了一个test client并且test server用于测试此功能,并且当前当用户有提示但没有输入任何内容时,他们可以接收来自其他用户的消息.当他们开始输入时,缓冲区不会刷新,直到他们输入整个消息并按Enter键.
我应该复制这种行为,但我对原始模式实际上是什么感到困惑.
任何人都可以告诉我如何通过原始模式控制输入/输出,或者为什么上面描述的测试程序的行为发生在使用原始模式?
我正在努力在linux上创建一个简单的shell.我可以创建一些东西来学习如何使用基本系统调用.
场景:命令中的用户类型,按Tab键(因此shell自动完成其命令),弹出自动完成的命令(或建议),用户按Enter键,命令evals并执行.
就像在bash中一样.
我已经想出如何进行evals,将命令转换为标记,使用管道和东西执行它.我无法弄清楚的是输入部分.即那些标签击键.
我知道我有什么选择:
getc() - 分别获取每个字符,将其存储在缓冲区中.无法弄清楚如何获得Tab键击,因为它会暂停执行,直到它看到'\n'或Ctrl + D. 有点贵,因为命令中的每个字符都会有1个getc().另外,我将不得不处理缓冲区重新分配,摊销......嘘......scanf("%s") - 太担心缓冲区溢出.我不能得到那些标签击键.暂停执行read()(来自unistd.h) - 可能是我不想做的事情.但是我看到这里的人说使用它来做这件事真的很痛苦.我检查了.它是.getline() - 无法获得Tab键击.我查看了bash源代码,看看它是如何处理输入的,以及OH MY GOD.有450行代码专门用来做这个简单的事情(input.c文件).
真的没有比这更简单的解决方案吗?我不想使用ncurses,我不关心可移植性,我只是想实现一个目标:获取用户输入并知道他何时按Tab键.尽可能少地努力,优雅地做到这一点.
刚开始使用K&R并点击:
#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
它只显示我输入的内容,即使它是一串文本.
cacti
cacti
stop repeating what i'm saying
stop repeating what i'm saying
Run Code Online (Sandbox Code Playgroud)
就像那样.
我没有得到的是为什么我不能用一串文本实例化变量c并以相同的方式打印它.(为了示例而忽略while循环)与:
main()
{
int c;
c = "cacti";
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
其中输出显然只是'd'