Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <termios.h>
- #include <unistd.h>
- struct termios orig_termios;
- void disableRawMode() {
- tcsetattr(STDIN_FILENO, TCSANOW, &orig_termios);
- printf("Term attributes restoredn");
- }
- void enableRawMode() {
- tcgetattr(STDIN_FILENO, &orig_termios);
- struct termios new_termios;
- memcpy(&new_termios, &orig_termios, sizeof(new_termios));
- new_termios.c_lflag &= ~ECHO;
- tcsetattr(STDIN_FILENO, TCSAFLUSH, &new_termios);
- //
- if (new_termios.c_iflag & BRKINT)
- puts("BRKINT is set");
- else
- puts("BRKINT is not set");
- if (new_termios.c_cflag & PARODD)
- puts("Odd parity is used");
- else
- puts("Even parity is used");
- if (new_termios.c_lflag & ECHO)
- puts("ECHO is set");
- else
- puts("ECHO is not set");
- //
- }
- int main(void)
- {
- enableRawMode();
- if(atexit(disableRawMode)) printf("Error in atexit().n");
- return 0;
- }
- $ ./atexit_test
- BRKINT is set
- Even parity is used
- ECHO is not set
- Term attributes restored
- $ timeout 3s ./atexit_test
- BRKINT is set
- Even parity is used
- ECHO is not set
- Term attributes restored
- $ sudo su -p - root bash -c "/home/programer/media/atexit_test/atexit_test"
- BRKINT is set
- Even parity is used
- ECHO is not set
- Term attributes restored
- $ sudo timeout 3s ./atexit_test
- $
- $ sudo timeout 3s ./atexit_test; echo $?
- 124
- tcsetattr(STDIN_FILENO, TCSAFLUSH, &new_termios);
- if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &new_termios) == -1) {
- int errsv = errno;
- printf("%d",errsv);
- }
Add Comment
Please, Sign In to add comment