今天在写一个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()不再需要回车相关推荐

  1. 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 ...

  2. Linux环境下——C语言聊天室项目

    由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...

  3. Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙(步步亲测有效)

    Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙 零:综述 一.windows10系统的安装 1.准备工作 2.制作启动盘 3.修改启动设 ...

  4. linux升级网卡fw,一种linux环境下覆盖多品牌硬盘的FW升级方法与流程

    本发明属于服务器硬盘升级技术领域,具体涉及一种linux环境下覆盖多品牌硬盘的FW升级方法. 背景技术: 随着浪潮服务器的不断发展和壮大,作为国内最大的服务器供应商,服务器市场已经囊括各个领域,客户对 ...

  5. Linux环境下安装配置Hadoop教程

    Linux环境下安装配置Hadoop教程 在Linux环境下,安装配置Hadoop教程. 准备工作 1.VMware虚拟机 2.Linux环境:CentOS 7 3.远程登陆:Xshell 6 &am ...

  6. Linux环境下EDA软件的使用——数字IC设计DC综合篇

    Linux环境下EDA软件的使用--数字IC设计DC综合篇   目前,绝大部分集成电路设计所用到EDA软件都是Linux版本,对于芯片工程师,熟悉一款EDA软件是入门的必修课,当然要真正的掌握会是十分 ...

  7. 【 Linux学习】Linux环境下利用OpenSSL对大文件进行AES加解密

    一.背景 之前的几篇博客已经介绍了Gitlab如何备份恢复与迁移已经脚本监控过程等. git学习--> Gitlab如何进行备份恢复与迁移? http://blog.csdn.net/ouyan ...

  8. 服务器远程连接控制以及在Linux环境下安装go编译环境

    本文主要内容 一.xshell远程控制服务器 二.VS code远程控制服务器 三.在Linux环境下安装go编译环境 初学者在没有人的指导下自己摸索学习真的是太难了,回想一下从大二创新实践开始到现在 ...

  9. Linux环境下安装 JDK1.8 以及配置环境变量

    Linux环境下使用指令下载JDK wget https://download.oracle.com/otn/java/jdk/8u291-b10/d7fc238d0cbf4b0dac67be8458 ...

最新文章

  1. lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析
  2. java 挂钩子_挂钩组件
  3. 骚操作!用 CPU 烤肉,这位程序员做到了
  4. 温州大学计算机与人工智能学院2022年硕士研究生招生复试咨询开始啦!
  5. 载荷谱matlab,收获机车架载荷测试及载荷谱编制方法研究
  6. php冒泡和选择排序,选择排序vs冒泡排序
  7. php练习 租房子
  8. 计算机系统基础:设备管理采用的相关技术知识笔记
  9. excel的mysql语言,Mysql中文乱码及导出sql语句和Excel的相关解决方法
  10. ubuntun 16.04环境安装Caffe过程
  11. python创建一个有序链表_Python实现合并两个有序链表的方法示例
  12. 具有分散效果的瀑布流
  13. POST 与GET的不同
  14. eclipse 中工程名出现红色感叹号问题 JRE System Library
  15. XILINX FPGA数字信号处理——3、数字的表示和运算的实现
  16. html中放大镜案列,HTML放大镜的一种实现及原理讲解(js)
  17. 快手Java开发二面面经分享
  18. 关于联合体及联合体嵌套结构体
  19. 制作1~2020门牌号共需要几个2字符?
  20. navigationBar的控制

热门文章

  1. webservice gsoap 小记
  2. SkGradientShader::CreateLinear 的参数。
  3. 实验三 静态路由、默认路由配置
  4. 关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法
  5. Microsoft Visual Studio 正忙
  6. 把16进制值转换成颜色颜色16进制值表 .
  7. Linux一键部署duckchat,宝塔面板部署DuckChat(翻译:鸭信)- 一个简约好用的网络聊天平台...
  8. spyder编辑器报ModuleNotFoundError: No module named ‘pymongo‘,明明已经安装上了pymongo扩展
  9. 云上如何做冷热数据分离
  10. Redis安装部署配置说明