当前位置:  技术问答>毕业设计课题求助:在linux平台下开发,有idea者请进!!! iis7站长之家

毕业设计快完成了,还有最后几个小毛病………快救命…………之一

    来源: 互联网  发布时间:2015-07-01

    本文导语:  在字符界面下写了个登录程序,但是发现linux下没有getche()和getch(),后来在外国人的帖子里找到一个模拟的方法,代码如下: char getch() { int rv; char ch; int fd = 0; // force to stdin struct termios oldflags, newflags; /****...

在字符界面下写了个登录程序,但是发现linux下没有getche()和getch(),后来在外国人的帖子里找到一个模拟的方法,代码如下:
char getch()
{
int rv;
char ch;
int fd = 0; // force to stdin
struct termios oldflags, newflags;
/*********** Reset the terminal to accept unbuffered input ***/
/* get the current oldflags */
tcgetattr(fd, &oldflags);
/* make a copy of the flags so we can easily restore them */
newflags = oldflags;
/* set raw input */
newflags.c_cflag |= (CLOCAL | CREAD);
newflags.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

/* set the newflags */
tcsetattr(fd, TCSANOW, &newflags);
rv = read(fd, &ch, 1);
/* restore the oldflags -- This is important otherwise
* your terminal will no longer echo characters
*/
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &oldflags);
return ch;
}

char getche()
{
int rv;
char ch;
int fd = 0; // force to stdin
struct termios oldflags, newflags;
/*********** Reset the terminal to accept unbuffered input ***/
/* get the current oldflags */
tcgetattr(fd, &oldflags);
/* make a copy of the flags so we can easily restore them */
newflags = oldflags;
/* set raw input */
newflags.c_cflag |= (CLOCAL | CREAD);
newflags.c_lflag &= ~(ICANON | ECHOE | ISIG);

/* set the newflags */
tcsetattr(fd, TCSANOW, &newflags);
rv = read(fd, &ch, 1);
/* restore the oldflags -- This is important otherwise
* your terminal will no longer echo characters
*/
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &oldflags);
return ch;
}

问题是,getche()和getch()都会得到键盘缓冲区里的第一个字符,但是其余的字符得不到,就是说如果在程序执行到getche()和getch()之前输入了一串字符,例如“12345”,结果当执行到getche()或getch()的时候,“1”被接收下来,以后无论执行getche()和getch()多少次,后面的“2345”则永远不会得到。

我得问题是,有没有什么方法:要么全都能接受到,要么能清空缓冲区,我试过fflush(stdin)不过不管用,要么提供另一种在字符界面下登录程序输入部分的设计方法


另外,

|
#ifdef TERMIOS
struct termios oldtty, noecho;
#else
#ifdef SGTTYB
struct sgttyb oldtty, noecho;
#else
struct termio oldtty, noecho;
#endif

/*
 * EchoOff
 * turn off echoing.  we call this function when we want to read
 * the password. (only for UNIX)
 */
void EchoOff()
{

int fd = fileno(stdin);

       /*
* first, get the current settings.
* then turn off the ECHO flag.
*/
#ifdef TERMIOS
if (tcgetattr(fd, &oldtty) 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 毕业设计求助(更多分相送)!
  • 毕业设计求助(更多分相送)!
  • linux 毕业设计求解答
  • 想要在linux下做个毕业设计,大家给推荐个题目吧
  • 毕业设计做JAVA,怎么写文档啊
  • 跟LINUX相关的毕业设计
  • 毕业设计课题
  • 求毕业设计题目
  • 毕业设计
  • 求linux相关的毕业设计题目
  • 毕业设计做完了,散分罗
  • 毕业设计用Linux可以做些什么!谢谢!
  • 高分求助!毕业设计里的一个问题
  • 毕业设计开题了:基于linux的个人防火墙的设计于实现,给点建议
  • 关于linux下USB驱动的毕业设计选题建议
  • 紧急提问,毕业设计选题,linux裁剪 和网格计算!!!!!!
  • 我做ejb方面的毕业设计,哪位高手给点建议!
  • 毕业设计课题求助:在linux平台下开发,有idea者请进!!!
  • 请教毕业设计相关题目询问各位高手。。
  • 毕业设计想写一个简单的shell出来,不知是否可行?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3