我无法在Linux中找到conio.h的等效头文件.
在Linux中有getch()&getche()function功能吗?
我想制作一个开关盒基本菜单,用户只需按一个键即可提供选项,并且应该向前移动过程.按下他的选择后,我不想让用户按ENTER键.
我正在尝试使用以下代码检索VT100终端中光标的坐标:
void getCursor(int* x, int* y) {
printf("\033[6n");
scanf("\033[%d;%dR", x, y);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下ANSI转义序列:
设备状态报告 - ESC [6n
将光标位置报告给应用程序(就像键入键盘一样)ESC [n; mR,其中n是行,m是列.
代码编译并发送ANSI序列,但是,在接收到它之后,终端将^[[x;yR字符串打印到stdout而不是stdin使我无法从程序中检索它:

显然,字符串是为程序指定的,所以我必须做错误的事情.有人知道它是什么吗?
假设该命令正在运行,我在运行ping时在终端上输入一些内容。ping
现在,当ping终止并bash重新获得控制权时,bash将在终端上打印我在ping运行时键入的内容。这是一个屏幕截图,显示了我的意思:
如何bash获得这些信息?我确信它没有从 中获取它stdin,因为当我输入 时"I typed this while ping was running",我没有按Enter(所以stdin是空的)。
因此,该数据必须存储在“击键缓冲区”中,并bash从该缓冲区中读取。
我的问题是,如何bash从该缓冲区读取(它调用什么函数......)?
假设我正在使用 fgets 读取一个字符串,并且我想防止该字符串的字符在终端内部回显(没有 bash 技巧)。我怎样才能做到这一点?
我是 C 的新手,所以我开始玩一些代码。我的代码中有一个错误,因为我认为使用使用printf(pass)不安全,因为它可以覆盖该值,因此对用户不安全。我想知道printf(pass)我的代码不安全是否正确?另外,我怎样才能让用户在finally logged in不更改代码的情况下打印消息。有没有办法做到这一点?
我的代码:
#include <stdio.h>
char pass[100];
char getPass() {
int value = 'G';
int * j = & value;
fgets(pass, sizeof(pass), stdin);
printf("your entered pass is ");
printf(pass);
return (char)( * j);
}
void main() {
printf("enter the pass here ");
if (getPass() == 'K') {
printf("finally logged in\n");
exit(0);
} else {
printf("Wrong password\n");
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)