Linux提供了一组编程接口,用来控制终端驱动程序的行为。这样我们可以更精细的来控制终端。

例如:

回显:允许控制字符的回显,例如读取密码时。

使用termios结构的密码程序

#include <stdio.h>
#include <termios.h>
#include <unistd.h>

#define LENGTH 8

char passwd[LENGTH];

int main()
{

struct termios initsettings;
    struct termios newsettings;

printf("input your password\n");

tcgetattr(fileno(stdin), &initsettings);

newsettings = initsettings;
    newsettings.c_lflag &= ~ECHO;

tcsetattr(fileno(stdin), TCSAFLUSH, &newsettings);

fgets(passwd, LENGTH, stdin);

tcsetattr(fileno(stdin), TCSANOW, &initsettings);

fprintf(stdout, "your passwd is:");
    fprintf(stdout, "%s", passwd);

return 0;

}

注意,在程序关闭结束之前,要恢复终端的原始设置。

----------------------------------------------------------------------

在非标准模式下,默认的回车和换行符之间的映射已经不存在了。'\n' 回车  '\r' 换行。

----------------------------------------------------------------------

当用户按下ctrl + c 组合键时,程序将终止。可以在本地模式下清除ISIG标志来禁用这些特殊字符的处理。

newsettings = initsettings;
    newsettings.c_lflag &= ~ICANON;//关闭标准输入处理

newsettings.c_lflag &= ~ECHO;//关闭回显功能

//一键入字符,fgetc立刻返回,不用按下回车键,

newsettings.c_cc[VMIN] = 1;

newsettings.c_cc[VTIME] = 0;

//禁用ctrl+c组合键,(按键按下时产生特殊字符?)

newsettings.c_lflag &= ~ISIG;

5.4.1 termios结构,关闭回显功能,一键入字符fgetc立刻返回,不用按下回车键的更多相关文章

  1. springmvc+ztree v3实现类似表单回显功能

    在做权限管理系统时,可能会用到插件zTree v3,这是一个功能丰富强大的前端插件,应用很广泛,如异步加载菜单制作.下拉选择.权限分配等.在集成SpringMVC中,我分别实现了zTree的添删改查, ...

  2. activiti官网实例项目activiti-explorer之扩展多选框回显功能

    相关参考链接:https://blog.csdn.net/murongxuesheng/article/details/76147380 回显:确认选中属性ng-model,循环属性ng-repeat ...

  3. HTML、jsp页面中radio,checkbox,select数据回显功能,默认被选中问题

    最近常常遇到各种复选框.单选框.下拉框的默认被选中的问题,开始也是绞尽脑汁的想办法,今天写一篇学习总结的博文来写一下学习总结. 单选框(radio)默认被选中: 一.jstl技术进行回显 <in ...

  4. <select>改造成<s:select>实现表单的回显功能

    初始: <select name="viewType"> <option value="0">全部主题</option> & ...

  5. js实现上传图片回显功能

    用到h5技术 <img id="headimg" src="<%=path%>/resources/images/icon4.png" sty ...

  6. boost::asio之(一)简单客户端服务器回显功能

    客户端: // BoostDev.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #inc ...

  7. springmvc 数据回显功能

    按下 修改数据之后 修改功能实现-转向修改页面 2)控制层实现准备数据,并转向修改页面 ~ PersonController.java package cn.itcast.springmvc.cont ...

  8. 普通的checkbox的回显功能

     var ypxt=document.getElementsByName("map.LCSYLB");           var jgjg='${map.LCSYLB}';    ...

  9. Linux串口编程のtermios 结构

    termios 结构是在POSIX规范中定义的标准接口,它类似于系统V中的termio接口,通过设置termios类型的数据结构中的值和使用一小 组函数调用,你就可以对终端接口进行控制. 可以被调整来 ...

随机推荐

  1. Android中ListView放入PopupWindow产生问题解决

    今天在做项目时候发现将ListView放入PopupWindow产生问题,ListView放入PopupWindow后 对PopupWindow设置了setFocusable(true)这时候其他的控 ...

  2. javax.transaction.xa.XAException: java.sql.SQLException: 无法创建 XA 控制连接。(SQL 2000,SQL2005,SQL2008)

    javax.transaction.xa.XAException: java.sql.SQLException:无法创建 XA 控制连接.错误: 未能找到存储过程'master..xp_sqljdbc ...

  3. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  4. python使用装饰器捕获异常

    可以编写一个通用的捕获异常的装饰器, 当程序发生异常时可以继续执行后续动作. 尤其适合于使用大量断言的验证性程序. 装饰器的实现原理使用了回调技术. 如下所示, robust 是一个装饰器. 当在普通 ...

  5. Android NDK 开发(二) -- 从Hlello World学起【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719  上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...

  6. Linux之sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  7. Java的深度克隆和浅度克隆

    说到克隆,其实是个比较简单的概念,跟现实生活正的克隆一样,复制一个一模一样的对象出来.clone()这个方法是从Object继承下来的,一个对象要实现克隆,需要实现一个叫做Cloneable的接口,这 ...

  8. 安装cgdb

    wget -c http://cgdb.me/files/cgdb-0.6.8.tar.gz .tar.gz cd cgdb- yum -y install texinfo help2man read ...

  9. Oracle存储过程单步调试方法

    oracle存储过程单步调试的方法 1.在要调试的过程上单击test,如下图所示: 2.出现如下界面时单击最左上方的按钮:,如下图所示: 3.单击后呈现如下画面: 其中: 表示要停止test; 表示要 ...

  10. 事务的隔离级别及mysql对应操作

    /* 本次高并发解决之道 1,更改事务隔离级别为 read uncommitted读未提交 2,查询前设定延迟,延迟时间为随机 50-500 微秒 3,修改数据前将 超范围作为 限定修改条件 事务是作 ...