Uçbirimsilerin Ayrılması
Önceki Uçbirimsiler Sonraki
Uçbirimsilerin Ayrılması
Bu bölümde bir uçbirim ayırmak için kullanılan işlevlerden sözedilecektir. Bu işlevler stdlib.h başlık dosyasında bildirilmiştir.
int getpt
(void)
işlev
getpt işlevi kullanılabilir ilk ana uçbirimsi için yeni bir dosya tanıtıcı ile döner. İşlevin normal dönüş değeri negatif olmayan bir tamsayı olarak dosya tanıtıcıdır. Bir hata oluşması durumunda -1 ile döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
ENOENT
Serbest bir ana uçbirimsi yok
Bu işlev bir GNU oluşumudur.
int grantpt
(int dosyatanıtıcı)
işlev
grantpt işlevi dosyatanıtıcı dosya tanıtıcısı ile ilişkili ana uçbirimsi aygıtının diğer ucu olan yardımcı uçbirimsinin sahipliğini ve erişim izinlerini değiştirir. Sahiplik, işlevi çağıran sürecin gerçek kullanıcı kimliği olur (bkz. Bir Sürecin Aidiyeti). Erişim yetkileri ise sahibi tarafından yazılabilir/okunabilir ve sadece grubu tarafından okunabilir olarak ayarlanır.
Bazı sistemlerde bu işlev özel bir setuid root yazılım çağrılarak gerçeklenir (bkz. Bir Sürecin Aidiyeti Nasıl Değiştirilir?). Dolayısıyla, SIGCHLD sinyali için bir sinyal eylemci oluşturulması bir grantpt çağrısı ile çelişebilir (bkz. İş Denetim Sinyalleri).
İşlevin normal dönüş değeri sıfırdır. Bir hata oluşması durumunda -1 ile döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
EBADF
dosyatanıtıcı geçerli bir dosya tanıtıcı değil
EINVAL
dosyatanıtıcı bir ana uçbirimsi ile ilişkili değil
EACCES
dosyatanıtıcı ile ilişkili olan ana uçbirimsinin karşı ucu olan yardımcı uçbirimsiye erişilemiyor.
int unlockpt
(int dosyatanıtıcı)
işlev
unlockpt işlevi dosyatanıtıcı dosya tanıtıcısı ile ilişkili ana uçbirimsi aygıtının diğer ucu olan yardımcı uçbirimsinin kilidini kaldırır. Bazı sistemlerde, yardımcı uçbirimsi sadece kilidi kaldırıldığında açılabilir, bu nedenle taşınabilir uygulamalar yardımcı uçbirimsiyi açarken daima bir unlockpt çağrısı yapmalıdır.
İşlevin normal dönüş değeri sıfırdır. Bir hata oluşması durumunda -1 ile döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
EBADF
dosyatanıtıcı geçerli bir dosya tanıtıcı değil
EINVAL
dosyatanıtıcı bir ana uçbirimsi ile ilişkili değil
char *ptsname
(int dosyatanıtıcı)
işlev
dosyatanıtıcı dosya tanıtıcısı bir ana uçbirimsi aygıtı ile ilişkili ise, ptsname işlevi ilişkili yardımcı uçbirimsinin dosya ismini, boş karakter sonlandırmalı durağan ayrılmış bir dizgeye gösterici ile döndürür. Bu dizge daha sonraki ptsname çağrıları ile değişebilir.
int ptsname_r
(int    dosyatanıtıcı,
 char  *tampon,
 size_t uzunluk)
işlev
ptsname_r işlevi ptsname işlevine benzemekle birlikte, sonucu kullanıcı tarafından belirtilen uzunluk uzunluktaki tampon içinde döndürmesi ile farklıdır.
Bu işlev bir GNU oluşumudur.
Taşınabilirlik Bilgisi
System V^den türetilmiş sistemlerde, ptsname ve ptsname_r işlevleri akım temelli olabilir ve bu nedenle onları açtıktan sonra, kullanmadan önce bir uçbirimsi olarak davranmaları için ek işlemler gerekebilir.
Bu işlevlerin genel kullanım biçimi örnekte gösterilmiştir:
int
open_pty_pair (int *amaster, int *aslave)
{
  int master, slave;
  char *name;

  master = getpt ();
  if (master < 0)
    return 0;

  if (grantpt (master) < 0 || unlockpt (master) < 0)
    goto close_master;
  name = ptsname (master);
  if (name == NULL)
    goto close_master;

  slave = open (name, O_RDWR);
  if (slave == -1)
    goto close_master;

  if (isastream (slave))
    {
      if (ioctl (slave, I_PUSH, "ptem") < 0
          || ioctl (slave, I_PUSH, "ldterm") < 0)
        goto close_slave;
    }

  *amaster = master;
  *aslave = slave;
  return 1;

close_slave:
  close (slave);

close_master:
  close (master);
  return 0;
}
Önceki Üst Ana Başlık Sonraki
Uçbirimsiler Başlangıç Bir Uçbirimsi Çiftinin Açılması
Bir Linux Kitaplığı Sayfası