C read a single character from the keyboard without waiting for the RETURN key On Mac (BSD Unix)
1 #include <stdio.h>
2 #include <sgtty.h>
3 static struct sgttyb savemodes;
4 static int havemodes = 0;
5
6 int tty_break()
7 {
8 struct sgttyb modmodes;
9 if(ioctl(fileno(stdin), TIOCGETP, &savemodes) < 0)
10 return -1;
11 havemodes = 1;
12 modmodes = savemodes;
13 modmodes.sg_flags |= CBREAK;
14 return ioctl(fileno(stdin), TIOCSETN, &modmodes);
15 }
16
17 int tty_getchar()
18 {
19 return getchar();
20 }
21
22 int tty_fix()
23 {
24 if(!havemodes)
25 return 0;
26 return ioctl(fileno(stdin), TIOCSETN, &savemodes);
27 }
28
29 main()
30 {
31 int i;
32 if(tty_break() != 0)
33 return 1;
34 for(i = 0; i < 10; i++)
35 printf(" = %d\n", tty_getchar());
36 tty_fix();
37 return 0;
38 }
39