Raw mode
- C kursu
- İleri seviye
- Ders 44/83
- 5 dk
Terminalı raw mode'a almayı öğrenirsin.
Raw mode nedir?
Raw mode, terminalın satır kipini ve diğer işlemlerini kapatır; her tuş vuruşu anında programa iletilir. cfmakeraw(&t) yardımcı fonksiyonu struct termios yapısını raw moda getirir; bu çağrı ICANON, ECHO ve daha birçok bayrağı temizler.
Manuel olarak da yapılabilir: t.c_lflag &= ~(ICANON | ECHO);. Raw moda geçmeden önce eski ayarları tcgetattr ile kaydetmek ve çıkışta tcsetattr ile geri yüklemek önemlidir. Test için cfmakeraw çağrısı sonrası printf("raw: 1\n") yazdırılabilir; bu deterministiktir.
cfmakeraw deseni
Tipik akış: struct termios t;, tcgetattr(STDIN_FILENO, &t); ile oku, cfmakeraw(&t); ile raw moda geçir, tcsetattr(STDIN_FILENO, TCSANOW, &t); ile uygula. Çıkışta eski ayarları geri yükle.
Test için asıl amaç cfmakeraw çağrısını göstermektir. tcsetattr gerçek terminal olmadan başarısız olabilir; ama yine de printf("raw: 1\n") çalışır ve deterministiktir. Gerçek uygulamada atexit ile eski ayarları geri yükleyen bir fonksiyon kaydedilir; böylece program çıkışında terminal normal moda döner.
Uygulama Raw moda geç
struct termios t; tanımla. tcgetattr(STDIN_FILENO, &t); ile oku. cfmakeraw(&t); ile raw moda geçir. printf("raw: 1\n"); ile durum yazdır.
Başlangıç kodu
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
// terminal yapısını tanımla ve oku
// raw moda geçir
// durumu yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main(void) {
struct termios t;
tcgetattr(STDIN_FILENO, &t);
cfmakeraw(&t);
printf("raw: 1\n");
return 0;
}Beklenen çıktı
raw: 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Raw mode parçalarını eşle
| Kavram | Anlamı |
|---|---|
cfmakeraw |
Raw moda geçirir |
ICANON |
Satır kipi |
ECHO |
Geri yankı |
c_lflag |
Yerel kip |
2 Raw modda hangi bayrak kapatılır?
- O_NONBLOCK
- F_SETLK
- STDIN_FILENO
- ICANON Doğru cevap
Açıklama: ICANON satır kipi bayrağı kapatılır; her tuş anında gelir.
3 cfmakeraw çağrısı
cfmakeraw(&____);
cfmakeraw(&t);
Açıklama: cfmakeraw, t yapısını raw moda getirir.