این قسمت هم کوتاه هست، تصمیم گرفتم قسمت ها رو کوتاه کنم ولی به جای یک هفته یک هفته، یک روز یک روز بنویسم
ما با استفاده از فلگِ ICANON می توانیم اقدام/مبادرت به خاموش یا روشن کردن حالت کانونیکال کنیم. که یعنی ما ورودی را کاراکتر به کاراکتر/بایت به بایت بجای خط به خط می بینیم.
برای همین کد را به مانند زیر/بالا تغییر می دهیم:
#include <unistd.h> #include <termios.h> #include <stdlib.h> struct termios orig; void disableRawMode(); void enableRawMode(){ tcgetattr(STDIN_FILENO , &orig); atexit(disableRawMode); struct termios raw = orig; raw.c_lflag &= ~(ECHO | ICANON); tcsetattr(STDIN_FILENO , TCSAFLUSH, &raw); } void disableRawMode(){ tcsetattr(STDIN_FILENO , TCSAFLUSH ,&orig); } int main(){ enableRawMode(); char ch; while( read(STDIN_FILENO , &ch , 1) && ch != 'q'); return 0; }
و این هم کد تغییر یافته، حالا بگرد و پیدا کن ??
اگر کد قبل رو اجرا می کردید. بعد از زدن q باید enter یا خط جدید می زدید اما حروف بعد از q به ترمینال پاس داده نمی شد.
الان شما مستقما q رو بزنید برنامه بسته می شود.