Nedeni , TCP / IP priz kullanımı dosya tanımlayıcıları neden prizler arayüzü ilk tasarlanmış ve (uygulamaya konulduğunda yani 1983 yılında, BSD Unix yapabilirsiniz -), onun tasarımcılar bir ağ bağlantısı bir dosyaya benzer olduğunu hissetti read
, write
ve close
her iki ve Unix’in “her şey bir dosya” olduğu fikrine çok iyi uyuyordu.
Diğer TCP / IP ağ yığını uygulamaları, OS'lerin dosya-I / O alt sistemleriyle bir bütünleşmedi, örneğin MacTCP . Ancak BSD soketleri arabirimi çok popüler olduğu için, bu diğer uygulamalar bile soket API'sini Unix benzeri işlevleriyle çoğaltmayı seçti, bu nedenle, yalnızca TCP / IP iletişimi için kullanılan, aksi takdirde yapmayan sistemlerde "dosya tanımlayıcıları" elde ettiniz dosya tanımlayıcıları var.
Sorunuzun diğer kısmı, neden bir limit var? Bunun nedeni, bir dosya tanımlayıcı arama tablosunu uygulamanın en hızlı yolunun bir dizi olmasıdır. Tarihsel olarak, sınır çekirdeğe kodlanmıştı.
İşlem başına 20 dosya tanımlayıcısının kodlanmış bir limiti olan Unix 7 (1979) sürümündeki kod:
Karşılaştırma yapmak gerekirse, Linux bir işlemin dosya tanımlayıcı tablosu için dinamik olarak yer ayırır. Mutlak limit varsayılan olarak 8192'dir, ancak bunu istediğiniz şekilde ayarlayabilirsiniz. Sistemim 191072'yi içeriyor /proc/sys/fs/file-max
.
Artık Linux'ta mutlak bir sınır olmamasına rağmen, programların çıldırmasına izin vermek istemiyoruz, bu nedenle yönetici (veya dağıtım paketleyicisi) genellikle kaynak sınırlarını belirler. Bir göz at /etc/security/limits.conf
veya koş ulimit -n
.