linux环境下c回车,linux_C 让 getchar()不再需要回车
今天在写一个C程序,用到getchar()时发现,它和windows(或dos)下不太一样,linux下会将输入的内容缓冲起来,等按了回车之后才去一个一个的读取缓冲区中的内容。标准输入设备应该都是行缓冲的,不管哪个函数应该都避免不了输入回车了......
所以就想办法看有没有可能在按下键盘后就立刻获取到字符,后来发现可以像串口设备那样去操作,来修改终端的属性,如下程序中的set_keypress()函数既实现了设置终端为RAW模式(不缓冲,一次读入一个字符),并且关闭了回显的功能;reset_keypress()函数可实现恢复终端的属性设置。
/
/// keypress.c文件内容
#include "keypress.h"
#include
static struct termios stored_settings;
void
set_keypress(void) //设置终端为RAW模式,并关闭回显
{
struct
termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_lflag &= (~ECHO);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
return;
}
void
reset_keypress(void) //恢复终端属性
{
tcsetattr(0,TCSANOW,&stored_settings);
return;
}
/
// keypress.h 文件内容
#ifndef _INCLUDE_KEYPRESS_H_
#define _INCLUDE_KEYPRESS_H_
#include
void set_keypress(void);
void reset_keypress(void);
#endif //_INCLUDE_KEYPRESS_H_
/
//测试程序
#include
#include
#include "keypress.h"
int main()
{
int i = 0;
int key = 0;
set_keypress(); //设置终端为RAW模式,并关闭回显
while((i++)<10)
{ key = getchar();
printf("key=%d\n",key);
}
reset_keypress(); //测试完成后恢复终端属性
i = 0;
while((i++)<10)
{
key=getchar();
printf("key=%d\n",key);
} return 0;
}
/
linux环境下c回车,linux_C 让 getchar()不再需要回车相关推荐
- linux打包java jar_在linux环境下修改可运行jar包配置并重新打包
在linux环境下修改可运行jar包配置并重新打包步骤: 1)mkdir xxx 2)mv XXX.jar XXX 3)jar xvf XXX.jar 4)mv XXX.jar ../ 5)vi XX ...
- Linux环境下——C语言聊天室项目
由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...
- Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙(步步亲测有效)
Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙 零:综述 一.windows10系统的安装 1.准备工作 2.制作启动盘 3.修改启动设 ...
- linux升级网卡fw,一种linux环境下覆盖多品牌硬盘的FW升级方法与流程
本发明属于服务器硬盘升级技术领域,具体涉及一种linux环境下覆盖多品牌硬盘的FW升级方法. 背景技术: 随着浪潮服务器的不断发展和壮大,作为国内最大的服务器供应商,服务器市场已经囊括各个领域,客户对 ...
- Linux环境下安装配置Hadoop教程
Linux环境下安装配置Hadoop教程 在Linux环境下,安装配置Hadoop教程. 准备工作 1.VMware虚拟机 2.Linux环境:CentOS 7 3.远程登陆:Xshell 6 &am ...
- Linux环境下EDA软件的使用——数字IC设计DC综合篇
Linux环境下EDA软件的使用--数字IC设计DC综合篇 目前,绝大部分集成电路设计所用到EDA软件都是Linux版本,对于芯片工程师,熟悉一款EDA软件是入门的必修课,当然要真正的掌握会是十分 ...
- 【 Linux学习】Linux环境下利用OpenSSL对大文件进行AES加解密
一.背景 之前的几篇博客已经介绍了Gitlab如何备份恢复与迁移已经脚本监控过程等. git学习--> Gitlab如何进行备份恢复与迁移? http://blog.csdn.net/ouyan ...
- 服务器远程连接控制以及在Linux环境下安装go编译环境
本文主要内容 一.xshell远程控制服务器 二.VS code远程控制服务器 三.在Linux环境下安装go编译环境 初学者在没有人的指导下自己摸索学习真的是太难了,回想一下从大二创新实践开始到现在 ...
- Linux环境下安装 JDK1.8 以及配置环境变量
Linux环境下使用指令下载JDK wget https://download.oracle.com/otn/java/jdk/8u291-b10/d7fc238d0cbf4b0dac67be8458 ...
最新文章
- lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析
- java 挂钩子_挂钩组件
- 骚操作!用 CPU 烤肉,这位程序员做到了
- 温州大学计算机与人工智能学院2022年硕士研究生招生复试咨询开始啦!
- 载荷谱matlab,收获机车架载荷测试及载荷谱编制方法研究
- php冒泡和选择排序,选择排序vs冒泡排序
- php练习 租房子
- 计算机系统基础:设备管理采用的相关技术知识笔记
- excel的mysql语言,Mysql中文乱码及导出sql语句和Excel的相关解决方法
- ubuntun 16.04环境安装Caffe过程
- python创建一个有序链表_Python实现合并两个有序链表的方法示例
- 具有分散效果的瀑布流
- POST 与GET的不同
- eclipse 中工程名出现红色感叹号问题 JRE System Library
- XILINX FPGA数字信号处理——3、数字的表示和运算的实现
- html中放大镜案列,HTML放大镜的一种实现及原理讲解(js)
- 快手Java开发二面面经分享
- 关于联合体及联合体嵌套结构体
- 制作1~2020门牌号共需要几个2字符?
- navigationBar的控制
热门文章
- webservice gsoap 小记
- SkGradientShader::CreateLinear 的参数。
- 实验三 静态路由、默认路由配置
- 关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法
- Microsoft Visual Studio 正忙
- 把16进制值转换成颜色颜色16进制值表 .
- Linux一键部署duckchat,宝塔面板部署DuckChat(翻译:鸭信)- 一个简约好用的网络聊天平台...
- spyder编辑器报ModuleNotFoundError: No module named ‘pymongo‘,明明已经安装上了pymongo扩展
- 云上如何做冷热数据分离
- Redis安装部署配置说明