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("\n");
38                 return 0 ;
39              case 'n': 
40              case 'N': 
41              case EOF: 
42                 printf("\n");
43                 return 1 ;
44              default : 
45                 printf("\nCannot understand %c" , input );
46                 printf("Please type y or no \n");        
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!\n");
74         }
75     }
76 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值