Kuralsız Kip Örneği
Önceki XVII. Oylum - Düşük Seviyeli Uçbirim Arayüzü Sonraki
Kuralsız Kip Örneği
Bu örnekte, kuralsız kipte tek bir karakteri bir uçbirimden okumak için ne yapılması gerektiği gösterilmiştir:
#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;
}
Bu yazılım, bir sinyalle sonlandırıldığında ya da çıkarken özgün uçbirim kiplerini tekrar yerine koyar. exit ile çıkılırken atexit işlevi ile bunu yapar (bkz. Çıkışta Temizlik).
Kabuğun süreç durdurulurken ve başlatılırken uçbirim kiplerini sıfırladığı varsayılmıştır; bkz. İş Denetimi. Fakat bazı kabuklar bunu yapmaz, bu durumda uçbirim kiplerini sıfırlamak için iş denetim sinyallerine eylemci oluşturmanız gerekebilir.
Önceki Üst Ana Başlık Sonraki
Hat Denetim İşlevleri Başlangıç Uçbirimsiler
Bir Linux Kitaplığı Sayfası