免费注册 查看新帖 |

Chinaunix

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

如何读取敲击键盘的键值,同时不显示在终端上? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-19 10:46 |只看该作者 |倒序浏览
我想在按键时读取键值码,同时不要显示在终端上面,应该怎么做呢?谢谢

论坛徽章:
0
2 [报告]
发表于 2010-07-19 10:54 |只看该作者
static char buf[SES_MAX_NAME_LENGTH_USERPASSWORD + 1];        /* null byte at end */
    char * ptr;
    sigset_t sig, osig;
    struct termios ts, ots;
    FILE * fp;
    int c;

    if ((fp = fopen(ctermid(NULL), "r+")) == NULL){
            return(NULL);
    }
    setbuf(fp, NULL);
    sigemptyset(&sig);
    sigaddset(&sig, SIGINT);                /* block SIGINT */
    sigaddset(&sig, SIGTSTP);                /* block SIGTSTP */
    sigprocmask(SIG_BLOCK, &sig, &osig);        /* and save mask */
    tcgetattr(fileno(fp), &ts);                /* save tty state */
    ots = ts;                                                /* structure copy */
    ts.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
    tcsetattr(fileno(fp), TCSAFLUSH, &ts);
    fputs(prompt, fp);
    ptr = buf;
    while ((c = getc(fp)) != EOF && c != '\n'){
        if (ptr < &buf[SES_MAX_NAME_LENGTH_USERPASSWORD]){
            *ptr++ = c;
        }
    }
    *ptr = 0;                        /* null terminate */
    putc('\n', fp);                /* we echo a newline */
    tcsetattr(fileno(fp), TCSAFLUSH, &ots); /* restore TTY state */
    sigprocmask(SIG_SETMASK, &osig, NULL);  /* restore mask */
    fclose(fp);                        /* done with /dev/tty */
    return(buf);

这段代码是用来读用户输入密码的.就是实现了"在按键时读取键值码,同时不要显示在终端上面"功能.

论坛徽章:
0
3 [报告]
发表于 2010-07-19 10:56 |只看该作者
ok,谢谢大侠!

论坛徽章:
0
4 [报告]
发表于 2010-07-19 11:34 |只看该作者
void set_tty_no_ECHO()
{       
        struct termios ts, ots;
        if(tcgetattr(0, &ts) < 0){
                perror("tcgetattr error:");
        }
        ots = ts;
        ts.c_lflag &= ~ECHO;
        tcsetattr(0, TCSANOW, &ts);
}

论坛徽章:
0
5 [报告]
发表于 2010-07-19 12:21 |只看该作者
好像WIN下面有个getche()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP