Bir uçbirimin kipini değiştireceğiniz zaman, önce tcgetattr çağrısı ile uçbirim aygıtının o anki kipini öğrenmeli, bu kipi istediğiniz özniteliklerle değiştirdikten sonra sonucu tcsetattr çağrısı ile uçbirime göndermelisiniz.
struct termios yapısını basitçe ilklendirip öznitelikleri istediğiniz gibi değiştirip sonra bunu tcsetattr işleviyle aktarmanız hiç iyi bir yöntem değildir. Yazılımınızın yıllar sonra bu kılavuzda belgelenmemiş üyelerin desteklendiği sistemlerde çalışabileceğini varsaymalısınız. İlgilenmediğiniz yapı üyelerini değiştirmekten kaçınmak en iyi yöntemdir.
Dahası, farklı uçbirim aygıtları farklı kip seçimleri gerektirebilir. Bu bakımdan öznitelikleri bir uçbirimden diğerine körü körüne kopyalamaktan da kaçınmalısınız.
c_iflag, c_oflag ve c_cflag üyelerinde olduğu gibi bir üye bağımsız seçeneklerin bir kolleksiyonunu içeriyorsa üyenin değerini tamamen değiştirmek de kötü olacaktır. Bunu yapmak yerine üyeyi mevcut değerlerle başlatmalı ve ilgisiz seçeneklere dokunmadan sadece yazılımınız için gerekli seçenekleri değiştirmelisiniz.
Bu örnekte struct termios yapısındaki diğer verilere dokunmadan sadece bir seçeneğin (ISTRIP) değiştirilmesi gösterilmiştir:
int
set_istrip (int desc, int value)
{
struct termios settings;
int result;
result = tcgetattr (desc, &settings);
if (result < 0)
{
perror ("tcgetattr'de hata");
return 0;
}
settings.c_iflag &= ~ISTRIP;
if (value)
settings.c_iflag |= ISTRIP;
result = tcsetattr (desc, TCSANOW, &settings);
if (result < 0)
{
perror ("tcsetattr'de hata");
return 0;
}
return 1;
}