Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef _POSIX_SOURCE
- # define _POSIX_SOURCE
- #endif
- #include <stdio.h>
- #include <signal.h>
- typedef enum { IGN, CTRL_C, CTRL_D } input_t;
- input_t last_input = IGN;
- void write_ctrl_c(int signum) {
- puts("\n?");
- last_input = CTRL_C;
- }
- int main(void) {
- struct sigaction handler = { .sa_handler = &write_ctrl_c };
- if (sigaction(SIGINT, &handler, NULL) == -1) {
- fputs("Error registering signal handler\n", stderr);
- return 1;
- }
- for (;;) {
- switch (getchar()) {
- case EOF:
- switch (last_input) {
- case CTRL_D:
- return 0;
- case IGN:
- last_input = CTRL_D;
- break;
- default:
- last_input = IGN;
- }
- break;
- case '\n':
- puts("?");
- default:
- last_input = IGN;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment