文档章节

模拟实现getch()

幽鬼
 幽鬼
发布于 2013/03/02 21:11
字数 250
阅读 996
收藏 2

上学期在写了一个小项目,现在想把它移植到linux上,但是getch()这个函数在linux中愣是让我使用不愉快,安装了个curese,在网上找了一堆东西都没解决。最后还是自己模拟实现一个感觉还简单些。代码如下

/*---------------------------------------
**  copyright (c) 2013-3-2 DeltaYang
**  E-mail: DeltaYang89@gmail.com
**  getch.c:模拟实现getch()
**--------------------------------------*/
#include <stdio.h>
#include <termios.h> //操作终端
#include <unistd.h>
#include <assert.h>
#include <string.h>

char getch() 
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //保留终端原来设置
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //从新设置终端参数
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
        //恢复中断设置
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}
//测试模拟密码输入
int main(int argc,char** argv)
{
	int pwdlen=10;
	char ch[10];
	int i=0;
	printf("PASSWORD:");
	fflush(stdin);
	ch[0]=getch();
	while(ch[i]!='\n'&&i<9)
	{
		printf("*");
		i++;
		ch[i]=getch();
	}
	ch[i]='\0';
	printf("\n---->:%s\n",ch);
}
[delta@localhost:getch]$ gcc getch.c -o getch
[delta@localhost:getch]$ ./getch 
PASSWORD:********
---->:detlfhgh
[delta@localhost:getch]$

© 著作权归作者所有

共有 人打赏支持
幽鬼
粉丝 0
博文 9
码字总数 1223
作品 0
长沙
私信 提问
C语言中getch()、getche()和getchar()

本文章为转载文章,文档贡献者wdzhangxiang 个人网址:www.baidu.com/p/wdzhangxiang 首先不要忘了,要用getch()必须引入头文件conio.h,以前学C语言的时候,我们总喜欢用在程序的末尾加上它...

杨奉武
2015/10/08
0
0
getch() getche() getchar()的区别

1.输入输出缓冲区的概念(C++用的多一些) 我想以一个例子说明,比如我想把一篇文章以字符序列的方式输出到计算机显示器屏幕上,那么我的程序内存作为数据源而显示器驱动程序作为数据目标,...

晨曦之光
2012/04/13
150
0
计算机图形学中initgraph()的问题

//bresenham算法实现画直线功能 #include"stdio.h" #include"graphics.h" #include"stdlib.h" #include"conio.h" main(){ int gdriver=DETECT,gmode; int xLocation,yLocation; //记录x轴和y......

youhuang
2012/11/23
220
1
区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

首先,这两个函数不是C标准库中的函数, int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。 int getche(void) //从标准输入读...

晨曦之光
2012/03/09
225
0
ubuntu下如何编译C语言

1.平台搭建 LInux下如果单纯是进行C编译环境搭建的话,是比较容易实现的,因为系统内置了编译器gcc,所以我们要做的只不过是写好c源文件然后在进行编译就可以了 如果没有gcc编译器的话,使用...

萧小蚁
2015/10/01
49
0

没有更多内容

加载失败,请刷新页面

加载更多

使用keepalived实现nginx的高可用

概述 是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群 10.10.10...

bboysoulcn
今天
1
0
Mysql索引机制B+Tree

1、问题引入 有一个用户表,为了查询的效率,需要基于id去构建索引。构建索引我们需要考虑两个方面的问题,1个是查询的效率,1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上...

万山红遍
今天
40
0
RDD

1.概念: RDD是spark整个体系中最基础核心的概念,RDD(Resilient Distributed DataSet)即弹性分布式数据集 弹性: RDD支持横向多分区,纵向操作内存不足写入磁盘,hdfs等,实现数据在内存和...

仟昭
今天
1
0
springboot整合mycat

动态数据源项目整合 Maven依赖信息 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relat......

须臾之余
今天
2
0
深入解析Vue 和微信小程序的区别、比较

写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。 一、生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多。 vue的...

前端攻城小牛
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部