linux 不回车直接读取一个字符的方法(termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。)
来源:互联网 发布:校园广播软件 编辑:程序博客网 时间:2024/05/29 02:58
以下有两种,其实就是一种,都是通过更改终端的设置,但用完一定要在改回来,第一种是封装好了getch(),第二种没有封装。
termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。
使用getch(),需要NCURSES库,但对这个库我不是很了解。使用时,要#include <curses.h>;编译时,要gcc test.c -l curses。根据zjq9931提供的百度文库资料,里面有两个例子,发现第一个例子直接使用的curses,效果不是很好。但第二个例子是我想要的效果(重新封装了getch())。大家可以参考zjq9931给出的链接。
我也把我写的代码放在这里供大家参考:
(其实就是参考zjq9931贴出的链接中的例2)
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <assert.h>
#include <string.h>
int getch(void);
int main(void)
{
char c = 0;
while (1) {
fflush(stdin);
c = getch();
printf("c = %d\n", c);
}
return 0;
}
int getch(void)
{
int c = 0;
int res = -1;
struct termios org_opts, new_opts;
res = tcgetattr(STDIN_FILENO, &org_opts);
assert(res == 0);
memcpy(&new_opts, &org_opts, sizeof(org_opts));
new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE);
tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
c = getchar();
res = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
assert(res == 0);
return c;
}
原理就是更改终端的设置,但用完一定要在改回来。
2.windows下面有 getch() 可以直接输入一个字符,而不需按回车。
Linux下如果想直接输入一个字符,只能使用getchar() ,而且要按回车才能触发输入,否则会一直阻塞在输入这里。网上找到一个解决办法,稍加改进,能实现跟windows下 getch() 一样的效果。
代码如下:添加头文件就可以直接使用了。
0 0
- linux 不回车直接读取一个字符的方法(termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。)
- linux 不回车直接读取一个字符的方法
- 模板方法模式(Template Method)-定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
- termios结构与控制终端接口的关系
- 设计一个多终端日志打印的接口,使得它可以动态支持不同终端的日志打印
- Linux终端彩色字符的输出方法
- Linux终端彩色字符的输出方法
- [Linux]在终端启动程序关闭终端不退出的方法
- [Linux]在终端启动程序关闭终端不退出的方法
- [Linux]在终端启动程序关闭终端不退出的方法
- termios的结构 ----Linux
- Linux中在终端打开图形界面的文件夹的方法
- Linux 在终端中打开新的终端:gnome-terminal
- 在Linux命令行终端中使用python的简单方法
- 终端IO termios结构
- 终端控制--termios结构
- 在linux终端退出Python的方法
- Linux直接启动到字符终端
- Volley使用详解
- 小白谈函数--学习崔老师的mooc学后感
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- 二维数组名无法赋给指针
- 二维数组作函数参数传递
- linux 不回车直接读取一个字符的方法(termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。)
- 理解TimesTen内存数据库DBI文件的作用以及相关故障处理
- HTTP/2 资料汇总
- Walk
- jquery03-06通过json动态创建表格
- JZOJ4877. 【NOIP2016提高A组集训第10场11.8】力场护盾
- String.intern();
- rem的用法(手机端代码)
- 最近思想工作总结