Kuralsız Girdi
Önceki Uçbirim Kipleri Sonraki
Kuralsız Girdi
Kuralsız girdi kipinde ERASE ve KILL gibi metin düzenleme karakterleri yoksayılır. Kullanıcının girdiyi düzenleyebildiği sistem oluşumları kuralsız kipte iptal edilir. Sinyal gönderme ve akış denetimi hariç tüm girdi karakterleri uygulamaya oldukları gibi yazıldıkları şekilde aktarılırlar. Metin düzenleme ile ilgili girdilerin alınması gerekliyse bunlar yazılım içinde gerçeklenmelidir.
Kuralsız kipte kaç girdinin ne kadar süre bekleneceğini denetleyen MIN ve TIME parametreleri vardır. Bunları kullanarak girdi yapıldıkça hiç beklemeden girdileri hemen işleme sokabilirsiniz.
MIN ve TIME struct termios yapısının üyesi olan c_cc dizisinde saklanır. Bu dizinin her elemanı belli bir role sahiptir ve her elemana rolü ifade eden bir sembolik sabit indis olarak kullanılarak erişilir. MIN ve TIME için bu indisler VMIN ve VMAX'tır.
int VMIN
makro
c_cc dizisinin MIN değerini içeren elemanının indisidir. Değer termios.c_cc[VMIN] içindedir.
MIN değeri sadece kuralsız girdi kipinde anlamlıdır; girdi kuyruğundan read ile okuma yapabilmek için en az kaç karakter gerektiğini belirleyen bir sayıdır.
int VTIME
int VTIME
makro
c_cc dizisinin TIME değerini içeren elemanının indisidir. Değer termios.c_cc[VTIME] içindedir.
TIME değeri sadece kuralsız girdi kipinde anlamlıdır; girdi kuyruğundan read ile okuma yapabilmek için ne kadar süreyle bekleme yapılacağını belirler; 0.1 saniyelik katları ifade eden bir tamsayı değerdir.
MIN ve TIME değerleri read işlevinin değer döndürmesi için gerekli kriterleri oluşturur. Sıfır ve sıfırdan farklı değerler ayrıca anlamlıdır. Bu bakımdan dört olası durum vardır:
  • TIME ve MIN, ikisi de sıfırdan farklı olabilir.
    Bu durumda TIME, girdi yapılırken her girdi karakterinden sonra ne kadar süre bekleneceğini belirtir. İlk karakter alındıktan sonra MIN bayt alınıncaya kadar her karakter için TIME kadar süre beklenir, hangisi önce dolarsa read okunan karakterlerle döner.
    read ilk karakter alınıncaya kadar TIME süresi dolsa bile daima bekler, ancak kuyrukta MIN karakterden fazlası varsa işlevden istenen karakter sayısına göre MIN karakterden fazlası dönebilir.
  • TIME ve MIN, ikisi de sıfır olabilir.
    Bu durumda read kuyrukta kaç karakter varsa hepsini istek sayısı uzunlukta anında döndürür. Bir girdi yoksa read sıfır değeriyle döner.
  • MIN sıfır, TIME sıfırdan farklı olabilir.
    Bu durumda, read ilk girdi için TIME kadar süreyle bekler ve kuyrukta kaç karakter varsa hepsini istek sayısı uzunlukta anında döndürür, bir girdi yoksa read sıfır değeriyle döner.
  • TIME sıfır, MIN sıfırdan farklı olabilir.
    Bu durumda read kuyruğa MIN bayt yazılıncaya kadar bekler ve istenen sayıda karakterle döner. Eğer kuyrukta MIN karakterden fazla karakter varsa MIN karakterden fazlası ile dönebilir.
MIN için 50 belirtirken işlevden 10 karakter okumasını istersek ne olacak? Normalde, read tamponda 50 karakter birikene kadar (ya da yukarıda açıklanan kurallar neyi gerektiriyorsa) bekler ve ilk 10 karakterle döner. Kalan 40 karakter sonraki read çağrıları ile okunmak üzere tamponda bırakılır.
Taşınabilirlik Bilgisi
Bazı sistemlerde MIN ve TIME alanları EOF ve EOL alanları ile aynıdır. MIN ve TIME değerleri sadece kuralsız kipte anlamlı iken EOF ve EOL sadece kurallı kipte anlamlı olduğundan bu durum çeşitli sorunlara yol açar. GNU kütüphanesinde bu alanlar ayrıdır.
void cfmakeraw
(struct termios *termios-p)
işlev
Bu işlev, uçbirimi BSD'de "temel kip" (raw mode) denilen kipe sokmak için kolay bir yol olarak kullanılır. Bu aslında bir kuralsız girdi kipidir ve uçbirimi çoğu işlem bakımından işlevsiz bir kanal haline getirir.
İşlev tam olarak şunları yapar:
  termios-p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                                |INLCR|IGNCR|ICRNL|IXON);
  termios-p->c_oflag &= ~OPOST;
  termios-p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
  termios-p->c_cflag &= ~(CSIZE|PARENB);
  termios-p->c_cflag |= CS8;
Önceki Üst Ana Başlık Sonraki
Özel Karakterler Başlangıç BSD Uçbirim Kipleri
Bir Linux Kitaplığı Sayfası