Çalışma dizini
Önceki XIV. Oylum - Dosya Sistemi Arayüzü Sonraki
Çalışma dizini
Her sürecin kendisiyle ilişkili bir dizini vardır. Bu dizine çalışma dizini denir ve göreli dosya isimlerinin çözümlenmesinde kullanılır (bkz. Dosya İsmi Çözümlemesi).
Sisteme oturum açtığınızda, sistem veritabanındaki kullanıcı hesabınızla ilişkili ev dizininiz çalışma dizininiz yapılır. Bir kullanıcının ev dizinini getpwuid veya getpwnam işleviyle bulabilirsiniz; bkz. Kullanıcı Veritabanı.
Kullanıcılar çalışma dizinlerini cd gibi kabuk komutlarını kullanarak değiştirebilirler. Bu bölümde açıklanan işlevler bu komutlarda ve çalışma dizinini değiştirmek ve incelemek için başka yazılımlarda kullanılan ilkellerdir. Bu işlevlerin prototipleri unistd.h başlık dosyasında bildirilmiştir.
char *getcwd
(char  *tampon,
 size_t boyut)
işlev
getcwd işlevi sizin tarafınızdan sağlanan tampon karakter dizisine o anki çalışma dizinini ifade eden mutlak dosya ismini kaydederek döner. boyut argümanı ile sisteme tampon için ayrılan boyut bildirilir.
Bu işlevin GNU kütüphanesindeki sürümü tampon argümanı olarak bir boş gösterici belirtebilmenizi mümkün kılar. Bu durumda getcwd işlevi malloc ile tamponu kendisi ayırır (bkz. Özgür Bellek Ayırma). Eğer boyut sıfırdan büyükse, tampon bu kadar daha büyük olur, aksi takdirde tampon sonucu tutmaya yetecek büyüklükte olur.
İşlevin normal dönüş değeri tampon'dur. Başarısızlık halinde boş gösterici döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
EINVAL
boyut argümanı sıfır ve tampon boş gösterici değil.
ERANGE
boyut argümanı ile belirtilen uzunluk çalışma dizini isminden daha kısa. Daha büyük dizi ayırarak yeniden deneyin.
EACCES
Dosya isminin bir elemanını aramak ya da okumak için izin verilmedi.
GNU'nun getcwd (NULL, 0) davranışını sadece getcwd işlevinin standart davranışını kullanarak gerçekleştirebilirdiniz:
char *
gnu_getcwd ()
{
  size_t size = 100;

  while (1)
    {
      char *buffer = (char *) xmalloc (size);
      if (getcwd (buffer, size) == buffer)
        return buffer;
      free (buffer);
      if (errno != ERANGE)
        return 0;
      size *= 2;
    }
}
Bir kütüphane işlevi olmayan ama çoğu GNU yazılımında kullanılan bir özelleştirilmiş isim olan xmalloc hakkında daha fazla bilgi için malloc Örnekleri bölümüne bakınız.
char *getwd
(char *tampon)
önerilmeyen işlev
Tampon için boyut belirtilmemesi dışında getcwd işlevinin benzeridir. getwd işlevi sadece BSD uyumluluğu için GNU kütüphanesine dahil edilmiştir.
tampon argümanı en azından PATH_MAX bayt uzunluktaki bir tampona gösterici olmalıdır (bkz. Dosya Sistemi Kapasite Sınırları). GNU sisteminde dosya ismi için bir sınırlama yoktur, yani dizin ismini içerecek yeterli alan için bu gereksizdir. Bu, bu işlevin kullanılmasının önerilmeme sebebidir.
char *get_current_dir_name
(void)
işlev
get_current_dir_name işlevi aslında getcwd (NULL, 0) çağrısının eşdeğeridir. Tek fark, PWD değişkeninin değerinin (eğer doğruysa) dönmesidir. Bu anlaşılması zor bir farktır. Eğer PWD değeri ile açıklanan dosya yolu bir ya da daha fazla sembolik bağ kullanıyorsa, değerin getcwd tarafından döndürülmesi durumunda sembolik bağlar çözümlenebilir ve bu bakımdan farklı bir sonuç ortaya çıkabilir.
Bu işlev bir GNU oluşumudur.
int chdir
(const char *dosyaismi)
işlev
Bu işlev sürecin çalışma dizinini dosyaismi yapar.
İşlevin normal dönüş değeri 0'dır. -1 değeri dönmüşse bir hata oluşmuş demektir. Bu işlev için tanımlanmış errno hata durumları dosya ismi sözdizimi hataları ile dosyaismi ismi bir dizin değilse ENOTDIR'dır.
int fchdir
(int dosyatanıtıcı)
işlev
Bu işlev sürecin çalışma dizinini dosyatanıtıcı ile ilişkili dizin yapar.
İşlevin normal dönüş değeri 0'dır. -1 değeri dönmüşse bir hata oluşmuş demektir. Bu işlev için tanımlanmış errno hata durumları:
EACCES
dirname tarafından döndürülen dizin için okuma izni verilmedi.
EBADF
dosyatanıtıcı geçerli bir dosya tanıtıcı değil.
ENOTDIR
dosyatanıtıcı bir dizin ile ilişkili değil.
EINTR
İşlev çağrısı bir sinyal ile engellendi.
EIO
Bir G/Ç hatası oluştu.
Önceki Üst Ana Başlık Sonraki
XIV. Oylum - Dosya Sistemi Arayüzü Başlangıç Dizinlere Erişim
Bir Linux Kitaplığı Sayfası