模拟实现getch()
博客专区 > 幽鬼 的博客 > 博客详情
模拟实现getch()
幽鬼 发表于5年前
模拟实现getch()
  • 发表于 5年前
  • 阅读 854
  • 收藏 2
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

上学期在写了一个小项目,现在想把它移植到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]$
标签: getch linux
共有 人打赏支持
粉丝 0
博文 9
码字总数 1223
×
幽鬼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: