乐闻世界logo
搜索文章和话题

在Linux中,什么等效于getch()和getche()?

5 个月前提问
4 个月前修改
浏览次数37

1个答案

1

在 Linux 环境中,getch()getche() 这两个函数并不是标准的 C 语言库函数,它们原本属于 Windows 下的 conio.h 库,用于无回显地获取用户输入的一个字符。在 Linux 中,要实现类似的功能,通常可以使用 termios 结构体来更改终端的设置,从而达到无需按回车即可捕获用户按键的效果。

具体来说,可以使用以下方法来模拟 getch()getche() 的行为:

  1. 使用 termios 结构体控制终端行为 - 通过修改 termios 结构体的设置,我们可以关闭回显(ECHO)和规范输入(ICANON),这样程序就可以在用户按下键盘时立即读取输入,而无需等待回车键。

下面是一个示例代码,展示了如何在 Linux 中实现 getch() 的功能:

c
#include <stdio.h> #include <termios.h> #include <unistd.h> // 函数:实现 getch() 功能 int getch(void) { struct termios oldt, newt; int ch; tcgetattr(STDIN_FILENO, &oldt); // 获取当前终端属性设置 newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); // 关闭规范输入和回显 tcsetattr(STDIN_FILENO, TCSANOW, &newt); // 应用新的设置 ch = getchar(); // 立即读取一个字符 tcsetattr(STDIN_FILENO, TCSANOW, &oldt); // 恢复终端原有设置 return ch; } int main() { char c; printf("按任意键继续...\n"); c = getch(); // 调用自定义的 getch() 函数 printf("你按下了: %c\n", c); return 0; }

此示例中,getch() 函数通过修改终端设置,让你可以实现不等待回车即可读取单个字符的功能。

  1. 模拟 getche() 功能 - getche()getch() 类似,但它会显示用户的输入。实现这个功能可以简单地在 getch() 的基础上添加一个打印字符的语句即可。

希望这些说明能够帮助您了解如何在 Linux 中实现类似 Windows 中 getch()getche() 的功能。

2024年6月29日 12:07 回复

你的答案