免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1271 | 回复: 0
打印 上一主题 下一主题

C实现取消终端输入回显——termios [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-11 21:39 |只看该作者 |倒序浏览
    取消终端输入回显主要由termios结构实现,看代码
               
               
                #include stdio.h>
#include termios.h>
int main(){
    struct termios new_setting,init_setting;
    char pwd[16];
    tcgetattr(0,&init_setting);
    new_setting=init_setting;
    //get termios setting and save it
    new_setting.c_lflag&=~ECHO;
    tcsetattr(0,TCSANOW,&new_setting);
    printf("please enter password: \n");  
    fgets(pwd,sizeof(pwd),stdin);
    printf("you enter %s\n",pwd);
    //restore the setting
    tcsetattr(0,TCSANOW,&init_setting);
    return 0;
}
取消回显是对终端的一种操作,而终端的值操作主要包含在如下的结构体里。
#include termios.h>
struct termios{
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t      c_cc[NCCS];
};
其中c_iflag控制输入数据在被传递给程序之前的处理方式。
c_oflag控制发送出去的字符传递到屏幕前是如何处理的。
c_cflag控制终端的硬件特性。
c_lflag控制终端的各种特性,上例取消回显正是对该项的一个操作。
c_cc对用户输入的CTRL+C这样的组合键时采取的一种特殊处理方式。
如果不是一定要编程实现取消回显,在终端输入stty -echo就取消了回显,stty echo可以恢复回显。
例子中通过int tcgetattr(int fg,struct termios *termios_p);获得初始化当前终端的termios结构,经过改变后调用int tcsetattr(int fg,int actions,const struct termios *termios_p)保存改变的结果。
actions项的TCSANOW表示立即对变量的值进行修改。还有TCSADRAIN表示等终端的输出都完成后才进行修改。TCSAFLUSH和TCSADRAIN类似,但是丢弃还未从read调用返回的当前可用输入。
new_setting.c_lflag&=~ECHO;就是去掉回显的功能,关于其他的功能字段,大家可以查看相关文档查看。
一个非常简单的程序!!!


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/62515/showart_494015.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP