zoukankan      html  css  js  c++  java
  • Understanding Unix/Linux Programming-用户程序:play_again2

     1 /* play_again1.c
     2  * purpuse: ask if user wants another play 
     3  * better : instant response without echo
     4  * returns: 0 -> yes , 1 -> no 
     5  */
     6  
     7  #include <stdio.h>
     8  #include <stdlib.h>
     9  #include <termios.h>
    10  
    11  #define QUESTION "Do you want another play?"
    12  
    13  int get_response(char *);
    14  void set_cr_noecho_mode(void);
    15  void tty_mode(int); 
    16  
    17  int main()
    18  {
    19      int response ;
    20      tty_mode(0);   // save tty mode
    21      set_cr_noecho_mode();
    22      response = get_response(QUESTION);
    23      tty_mode(1);   // restore tty mode
    24      return response ;
    25  }
    26  
    27  int get_response(char * qiz)
    28  {
    29      int input ;
    30      printf("%s(y/n)" , qiz);
    31      while(1)
    32      {
    33          switch(input = getchar())
    34          {
    35              case 'y':
    36              case 'Y': 
    37                 printf("
    ");
    38                 return 0 ;
    39              case 'n': 
    40              case 'N': 
    41              case EOF: 
    42                 printf("
    ");
    43                 return 1 ;
    44              default : 
    45                 printf("
    Cannot understand %c" , input );
    46                 printf("Please type y or no 
    ");        
    47          }
    48      }
    49  }
    50  
    51 void set_cr_noecho_mode(void)
    52 {
    53     struct  termios ttystate ;
    54     tcgetattr(0 , &ttystate);
    55     ttystate.c_lflag &= ~ICANON ;   // No Buffering
    56     ttystate.c_lflag &= ~ECHO ;//关闭回显
    57     ttystate.c_cc[VMIN] = 1 ;   //Get one char one time 
    58     tcsetattr( 0 , TCSANOW , &ttystate);    
    59 }
    60 
    61 void tty_mode(int mode)
    62 {
    63     static struct termios original_mode ;// 设置静态结构体变量
    64     if(mode == 0 )
    65     {
    66         tcgetattr( 0 , & original_mode);// 存储原有设置
    67     }
    68     else
    69     {
    70         //还原原有设置
    71         if( tcsetattr(0 , TCSANOW , & original_mode) == -1 )
    72         {
    73             perror("Restore tty settings failed!
    ");
    74         }
    75     }
    76 }
  • 相关阅读:
    js回调函数
    .aspx 页面引用命名空间
    git使用
    C# dynamic
    vue难点解析之混入
    rollup的使用
    基本配置webpack.config.js
    webpack之copy-webpack-plugin
    rest请求和restful请求及其中涉及到的幂等特性
    centos破解压缩文件密码
  • 原文地址:https://www.cnblogs.com/NJdonghao/p/5291941.html
Copyright © 2011-2022 走看看