当前位置:  技术问答>linux和unix

关于Unix上读取键盘输入的问题(curses)

    来源: 互联网  发布时间:2014-12-31

    本文导语:  大家用过curses编程,对于PageUp和ESC的读取,我似乎无法解决,如果确实想按ESC,   似乎 if ( in_char == -1 ) 不能立刻得到, 而在按了下一个键后,就返回了ESC. 请有过这方面经验的帮忙。 in_char = getch(); if ( ...

大家用过curses编程,对于PageUp和ESC的读取,我似乎无法解决,如果确实想按ESC,
  似乎 if ( in_char == -1 ) 不能立刻得到, 而在按了下一个键后,就返回了ESC.

请有过这方面经验的帮忙。

in_char = getch();

if ( in_char == CTL_V ) return KEY_PGDN;
else
if ( in_char != ESC ) return in_char;

in_char = getch();

if ( in_char ==  -1 ) return ESC;
else
if ( in_char == 'v' ) return KEY_PGUP;
else
if ( in_char == '[' )
{
in_char = getch();
switch ( in_char )
{
  case 'A': return KEY_UP;
  case 'B': return KEY_DOWN;
  case 'C': return KEY_RIGHT;
  case 'D': return KEY_LEFT;
  case 'H': return KEY_A1;
  case 'J': return KEY_A3;
  case 'K': return KEY_C3;

|
我没用用过curses,我用的是ioctl,设置终端类型为0个缓冲,每次读键盘0.2秒没有东西返回一个特定值,代码和你的差不多
#include 
#include 
static struct termio ttysave ;
void restore() ;
char getch() ;

main()
{
puts( "---------------------------" ) ;
puts( "enter a key : " );
getch() ;
puts( "n--------------" );
exit( 0 ); 
}

char getch()
{
   static char ch ;
   static int total, flag = 1 ;
   struct termio tty ;

   if( flag )
   {
       flag = 0 ;
       if( ioctl( 0, TCGETA, &tty ) == -1 )
       {
             perror( "ioctl" ); 
             exit( -1 );
        }
        ttysave = tty ;
        tty.c_lflag &= ~( ICANON | ECHO | ISIG ) ;
        tty.c_cc[VMIN] = 1  ;    // MIN
        tty.c_cc{VTIME] = 0 ;    // TIME 
        if( ioctl( 0, TCSETAF, &tty ) == -1 ) 
        {
               restore();
               perror( "ioctl" );
               exit( -2 );
        }
   }

   switch( total = read( 0, &ch, 1 ))
   {

case -1 :
restore() ;
perror( "read" );
exit( 3 );
case 0:
restore():
fputs( "EOF error!", stderr );
exit( 4 ) ;
default:
.....
   }

   restore();
   return( ch );
}


void restore()
{
  if( ioctl( 0, TCSETAF, &ttysave ) == -1 )
  {
perror( "ioctl" );
       exit( 5 );
  }
   return ;
}
这是初始化部分

|
这个问题估计是你参数设置的不对,试一试
在你的getch调用前使用这两个函数
 nonl();
 raw();
应该就可以解决你那个问题

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












  • 相关文章推荐
  • SOS!安装SCO Unix5.05 要求输入授权码时为什么不能输入大写??
  • 我想装unix或linux,但显卡和声卡的驱程去那找?unix和linux有五笔输入吗?在那里可以找到?
  • sco unix下如何快速重复以前输入过的命令?
  • unix下有中文输入法吗?在网上没找到呀
  • UNIX下,如何输入一个字符让其显示为 *
  • 安装sco unix 5.05 时,提示输入lisense number: 时找不到!!!!(菜鸟问题)
  • 请问 可以在unix系统下安装输入法吗 那里提供下载 如何安装 请详细讲 我是新手
  • 文件的输入“<”的问题(兼问如何学习UNIX下编程)
  • 请教UNIX C字符输入的检测函数?
  • java开发知识 iis7站长之家
  • Unix中最简单的问题:输入一个表达式,显示其结果。使用SCO OpenServer
  • 在Linux或Unix下有没有什么好的中文五笔输入法?
  • UNIX中有接口让应用程序来输入用户名和密码吗?
  • sco unix 下输入 man socket 居然显示 man:socket not found up有分
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX
  • 散分!!unix 用户调查!!!你使用哪款unix
  • hp unix 和 sco unix的区别
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 强烈建议将linux/Unix栏目放到“软件开发者”大类里面来。----Unix开发的人助威支持!!!


  • 站内导航:


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

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

    浙ICP备11055608号-3