C rutinleri opendir(), readdir() ve closedir() bir dizin yapısını geçmem için bir yol sağlar. Ancak, readdir() tarafından döndürülen her bir yön yapısı, dizin alt dizinlerine tekrar girmem gerekecek olan DIR işaretçi kümesini elde etmem için kullanışlı bir yol sağlamayabilir.Etkin Çapraz Yönlendirme Dizini opendir(), readdir() ve closedir()
Tabi ki bana dosyaların ismini verdiler, bu yüzden bu adı ya dizin yoluna ve stat() ve opendir() öğesine ekleyebilirim ya da işlemin şu andaki çalışma dizinini chdir yoluyla değiştirebilirim() ve chdir (“..”) ile geri döndürün.
İlk yaklaşımdaki sorun, dizin yolunun uzunluğu yeterince büyük olduğunda, opendir() öğesini içeren bir dizeyi geçirmenin maliyetinin bir dizinin açılması maliyetini aşmasıdır. Biraz daha teorik iseniz, karmaşıklığınızın doğrusal zamanın ötesine geçebileceğini söyleyebiliriz (dizin ağacındaki (bağıl) dosya adlarının toplam karakter sayısında). Ayrıca, ikinci yaklaşımın bir sorunu vardır. Her işlem tek bir geçerli çalışma dizinine sahip olduğundan, bir iş parçacığının tümü, bir çok iş parçacıklı uygulamada engellenmelidir. Ayrıca, geçerli çalışma dizininin sadece bir kolaylık olup olmadığını bilmiyorum (yani dosya sistemi sorgusu öncesinde göreceli bir yol eklenecektir). Öyleyse, bu yaklaşım da verimsiz olacaktır.
Bu işlevlere alternatifleri kabul ediyorum. Peki, bir UNIX dizin ağacını verimli bir şekilde nasıl geçebilir (altındaki dosyaların toplam karakter sayısında doğrusal zaman)?
bir dosya adı ya da alt dizinin maksimum uzunluğu geleneksel olarak kesinlikle 255 ve size fonksiyon özyinelemeli yaparsanız Yani, büyük dizeleri olmaz hemen hemen hiç fazla 512 den olduğunu MAXCOMPLEN tarafından ayarlanır dizin yollarını tutan dizeleri ayırma ve yönetme noktasının yakınında hiçbir yerde geçişin genel karmaşıklığını etkiler. –