|
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <termios.h> /* Uçbirim özniteliklerini bir değişkende saklayalım. */ struct termios saved_attributes; void reset_input_mode (void) { tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes); } void set_input_mode (void) { struct termios tattr; char *name; /* stdin bir uçbirim mi. */ if (!isatty (STDIN_FILENO)) { fprintf (stderr, "Bir uçbirim değil.\n"); exit (EXIT_FAILURE); } /* Uçbirim özniteliklerini daha sonra yerine koymak için saklayalım. */ tcgetattr (STDIN_FILENO, &saved_attributes); atexit (reset_input_mode); /* Şimdi uçbirimi kuralsız kipe sokalım. Girdinin tekrar yansılanmaması için yansılamayı da kapatacağız. */ tcgetattr (STDIN_FILENO, &tattr); tattr.c_lflag &= ~(ICANON|ECHO); /* ICANON ve ECHO temizlendi. */ tattr.c_cc[VMIN] = 1; /* Girdi tek karakterlik okunsun. */ tattr.c_cc[VTIME] = 0; /* Okuma için beklenmesin. */ tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr); } int main (void) { char c; set_input_m char c; set_input_mode (); while (1) { read (STDIN_FILENO, &c, 1); if (c == '\004') /* C-d */ break; else write (STDOUT_FILENO, &c, 1); } return EXIT_SUCCESS; }
|