Dosya Tanıtıcı Seçenekleri
Önceki XIII. Oylum - Düşük Seviyeli Girdi ve Çıktı Sonraki
Dosya Tanıtıcı Seçenekleri
Dosya tanıtıcı seçenekleri bir dosya tanıtıcısının çeşitli öznitelikleridir. Bu seçenekler her dosya tanıtıcısı için özeldir, yani tek bir dosya için bir dosya tanıtıcısını kopyalayarak çoğaltsanız bile yeni dosya tanıtıcısının seçeneklerinde yapacağınız değişiklik özgün tanıtıcıyı etkilemeyecektir.
Şimdilik sadece bir dosya tanıtıcı seçeneği vardır:FD_CLOEXEC. Bu seçenek exec… işlevlerini kullandığınızda tanıtıcının kapanmasına sebep olur.
Bu kısımdaki semboller fcntl.h başlık dosyasında tanımlıdır.
int F_GETFD
makro
Bu makro fcntl işlevinin komut argümanında kullanıldığında dosyatanıtıcı ile ilişkili dosya tanıtıcı seçeneklerini döndürür.
Bu komutun fcntl işlevinden döndürdüğü değer tek tek seçeneklerin bit seviyesinde VEYA'lanarak yorumlandığı negatif olmayan bir sayıdır (tek tek seçenekler dense de şimdilik sadece bir seçenek var).
Bir hata oluşmuşsa işlev -1 ile döner. Aşağıdaki errno hata durumu bu komut için tanımlıdır:
EBADF
dosyatanıtıcı argümanı geçersiz
int F_SETFD
makro
Bu makro fcntl işlevinin komut argümanında dosyatanıtıcı ile ilişkili dosya tanıtıcı seçeneklerini belirlemek için kullanılır. Bu komut yeni seçeneklerin belirtildiği int türünde üçüncü bir argüman gerektirir. Böyle bir çağrı şöyle yapılabilir:
fcntl (dosyatanıtıcı, F_SETFD, yeni_seçenekler)
Bu komutun fcntl işlevinden döndürdüğü değer hata durumunu belirten -1 değeri dışında belirsizdir. Seçenekler ve hata durumları F_GETFD komutundakilerle aynıdır.
Aşağıdaki makro fcntl işlevinde bir dosya tanıtıcı seçeneği olarak kullanılmak üzere tanımlanmıştır. Değeri bir bitmaskesi değeri olarak kullanılabilecek bir tamsayı sabittir.
int FD_CLOEXEC
makro
Bu seçenek, bir exec işlevi çağrıldığında dosya tanıtıcının kapatılacağını belirtmek için kullanılır. Bir dosya tanıtıcı bir open veya dup işlevi ile ayrıldığında, bu seçenek temizlenir. Böylece exec işlevi ile oluşturulan yeni sürecin dosya tanıtıcısını miras alabilmesi sağlanmış olur.
Dosya tanıtıcı seçeneklerini değiştirmek isterseniz, mevcut seçenekleri F_GETFD ile alıp değeri değiştirmelisiniz. Sadece burada açıklanan seçeneklerin varolduğu gibi bir kabul yapmamalısınız; yazılımınız yıllar sonra daha fazla seçeneğin varolduğu bir sistem üzerinde de çalışabilmelidir. Örneğin, aşağıdaki işlev diğer seçeneklere dokunmadan sadece FD_CLOEXEC seçeneği ile çalışır:
/* desc tanıtıcısına FD_CLOEXEC seçeneği,
  value sıfırdan farklıysa atanır, değilse temizlenir.
  Dönüş değeri hata yoksa 0, varsa -1 olur ve hata errno'ya
  atanır. */

int
set_cloexec_flag (int desc, int value)
{
  int oldflags = fcntl (desc, F_GETFD, 0);
  /* seçeneklerin okunması başarısız olursa,
     hata durmunun belirtip hemen dönelim. */
  if (oldflags < 0)
    return oldflags;
  /* Seçeneğin durumunu belirleyebiliriz. */
  if (value != 0)
    oldflags |= FD_CLOEXEC;
  else
    oldflags &= ~FD_CLOEXEC;
  /* Değiştirilen seçeneği dosya tanıtıcısına atayalım. */
  return fcntl (desc, F_SETFD, oldflags);
}
Önceki Üst Ana Başlık Sonraki
Tanıtıcıların Çoğullanması Başlangıç Dosya Durum Seçenekleri
Bir Linux Kitaplığı Sayfası