10.设备文件


  1 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <termio.h>
  4 #include <string.h>
  5 
  6 //转小写输入
  7 void TestIoflag()
  8 {
  9     struct termio old,new;
 10     char szBuf[100];
 11     
 12     ioctl(STDIN_FILENO,TCGETA,&old);//获取当前属性
 13     
 14     new = old;//备份属性
 15     
 16     //输入到字符大写转小写
 17     new.c_iflag |= IUCLC;
 18     
 19     ioctl(STDIN_FILENO,TCSETA,&new);//设置到当前属性
 20     
 21     scanf("%s",szBuf);
 22     
 23     printf("szBuf:%s
",szBuf);
 24     
 25     ioctl(STDIN_FILENO,TCSETA,&old);//恢复之前的属性
 26     
 27 }
 28 
 29 //转大写输出
 30 void TestOflag()
 31 {
 32         struct termio old,new;
 33         
 34         ioctl(STDOUT_FILENO,TCGETA,&old);
 35         
 36         new = old;
 37         new.c_oflag |= OLCUC;    //set OLCUR bit to 1
 38         ioctl(STDOUT_FILENO,TCSETA,&new);
 39         
 40         printf("Hello,world!
");
 41         
 42         ioctl(STDOUT_FILENO,TCSETA,&old);
 43 }
 44 
 45 //无缓冲输出Ascii码
 46 void PrintCharAscii()
 47 {
 48         struct termio old,new;
 49         //获取当前到设置
 50         ioctl(STDOUT_FILENO,TCGETA,&old);
 51         
 52         new = old;
 53         new.c_lflag &= ~ICANON;//remove ICANON
 54         //设置当前模式为无缓冲模式
 55         ioctl(STDIN_FILENO,TCSETA,&new);
 56         
 57         char c = 0;
 58         while(c != '
')
 59         {
 60                 c = getchar();
 61                 printf(" -->%d
",c);
 62         }
 63         
 64         ioctl(STDIN_FILENO,TCSETA,&old);
 65         return;
 66 }
 67 
 68 //设置不回显模式
 69 void TestPasswd()
 70 {
 71         struct termio old,new;
 72         ioctl(STDIN_FILENO,TCSETA,&old);
 73         
 74         new = old;
 75         new.c_lflag &= ~ECHO;
 76         
 77         ioctl(STDIN_FILENO,TCSETA,&new);
 78     
 79         char szPass[100] = {};
 80         fprintf(stderr,"Password:");
 81         scanf("%s",szPass);
 82         
 83         
 84         ioctl(STDIN_FILENO,TCSETA,&old);
 85         
 86         printf("
");
 87         printf("Your password is:%s",szPass);
 88 }
 89 
 90 //设置等待
 91 void TestCCC()
 92 {
 93         struct termio old,new;
 94         char szBuf[100] = {};
 95         //获得属性
 96         ioctl(STDIN_FILENO,TCGETA,&old);
 97         
 98         //设置新的属性
 99         new = old;
100         //最大到输入长度
101         new.c_cc[VMIN] =10;
102         //等待时间
103         new.c_cc[VTIME] = 50;//50 -> 5 second
104         //无缓冲模式
105         new.c_lflag &= ~ICANON;//remove ICANON
106         ioctl(STDIN_FILENO,TCSETA,&new);
107         
108         fprintf(stderr,"Input:");
109         
110         read(STDIN_FILENO,szBuf,100);
111         
112         printf("szBuf:%s",szBuf);
113         
114         //恢复原来的属性
115         ioctl(STDIN_FILENO,TCSETA,&old);
116 }
117 
118 int main()
119 {
120     //TestIoflag();
121     //TestOflag();
122     //PrintCharAscii();
123     //TestPasswd();
124     TestCCC();
125     return 0;
126 }





1.设备文件操作流程

 

 

2.常用属性设置

原文地址:https://www.cnblogs.com/xiaochi/p/8984033.html