Bu bölümde bir dizin akımının nasıl açılacağından bahsedilecektir. Bu bölümdeki tüm semboller
dirent.h başlık dosyasında bildirilmiştir.
DIR bir dizin akımını ifade eden veri türüdür.
Dizin erişim işlevleri sizin yerinize bu işi yaptığından, struct dirent veya DIR türünde nesneler ayırmamalısınız. Bu nesnelere gösterici döndüren işlevleri kullanarak bu nesnelere erişebilirsiniz.
DIR *opendir | (const char *dizinismi) |
işlev
opendir işlevi ismi dizinismi olan dizini okumak için bir dizin akımı döndürür. Akım DIR * türündedir.
İşlev başarısız olursa boş gösterici döndürür.
Dosya ismi hatalarına ek olarak aşağıdaki
errno hata durumları bu işlev için tanımlanmıştır:
- EACCES
dirname ile döndürülen dizini okuma izni verilmedi.
- EMFILE
Süreç çok fazla dosya açmış.
- ENFILE
Dizini içeren sistem ya da dosya sistemi şu anda daha fazla dosya açılmasını desteklemiyor. (GNU sisteminde böyle bir sorun asla olmaz.)
- ENOMEM
Yeterli bellek yok.
opendir tarafından okumak için açılan dizin ismiyle tanınır. Bazı durumlarda bu kafi değildir. Ya da opendir yoluyla dizin için örtük olarak oluşturulan bir dosya tanıtıcı yazılımda istenen yol değildir. Bu gibi durumlarda başka bir arayüz kullanılabilir.
DIR *fopendir | (int dosyatanıtıcı) |
işlev
fdopendir işlevi bir dosya ismi almak ve dizin için bir dosya tanıtıcı açmak yerine dosya tanıtıcının çağrı sırasında belirtilmesini gerektirmesi dışında opendir gibi çalışır. Bu dosya tanıtıcı dönen dizin akımı nesnesinin daha sonraki kullanımlarında kullanılır.
İşlev çağrılırken kullanılan dosya tanıtıcının bir dizin ile ilişkili olduğundan ve okumaya izin verdiğinden emin olunmalıdır.
fdopendir çağrısı başarılı olursa dosya tanıtıcı sitemin denetimi altına girer. opendir tarafından örtük olarak oluşturulan tanıtıcının kullanıldığı gibi kullanılabilir fakat yazılım tanıtıcıyı kapatmamalıdır.
İşlev başarısız olduğu durumlarda bir boş gösterici döndürür ve dosya tanıtıcı yazılım tarafından kullanılabilir olarak kalır. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
- EBADF
Dosya tanıtıcı geçersiz.
- ENOTDIR
Dosya tanıtıcı dizinle ilgili değil
- EINVAL
Dosya tanıtıcı dizin içeriğinin okunmasına izin vermiyor.
- ENOMEM
Yeterli bellek yok.
Bazı durumlarda opendir çağrısı ile oluşturulan dosya tanıtıcıya erişmek istenebilir. Örneğin, çalışma dizinini bir dosya tanıtıcı kullanarak değiştiren fchdir işlevi için bu gerekli olabilirdi. Tarihsel olarak DIR türü ile fazla uğraşıldığından yazılımlar alanlarına erişemezler. Ancak GNU kütüphanesinde bu böyle değildir. Erişimi sağlamak için ayrı bir işlev vardır.
int dirfd | (DIR *dizinakımı) |
işlev
dirfd işlevi dizinakımı ile ilişkili dosya tanıtıcı ile döner. Dizin tanıtıcı dizin akımı closedir ile kapatılıncaya kadar geçerli kalır. Eğer dizin akımı gerçeklemesi dosya tanıtıcılarını kullanmıyorsa işlev -1 ile döner.