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\n",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!\n");
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 != '\n')
59 {
60 c = getchar();
61 printf(" -->%d\n",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("\n");
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.常用属性设置