2011-11-09 15 views
5

64-bit Linux'ta dosya tanımlayıcılarını beklemek için epoll_wait kullanarak bir program yazıyorum ve epoll_event kullanıcı verisindeki dosya tanıtıcısıyla birlikte bazı bilgileri bir araya getirmeye çalışıyorum.64 bit Linux'taki dosya tanıtıcıları aralığı nedir?

Pratikte, dosya tanıtıcısının 32 bit değerini aşması olası değildir. Sadece bilmek istiyorum ki, çekirdek dosya tanımlayıcılarının belirli bir aralığa sahip olduğunu garanti eder, ya da sadece küçükten ve büyük olasılıkla çok büyük olmaktan çıkar?

+0

FD numaralarının geri dönüştürüleceğini hayal ediyorum - örn. İşlem için en yüksek eşzamanlı açık tanımlayıcı sayısını asla aşmayın - ama .... Hiçbir fikrim yok. –

+0

fd, çalışma zamanında "küçük" anlamına gelen "küçük" negatif olmayan int'dir. Bunun ötesinde, çekirdek değeri konusunda hiçbir garanti vermez. –

cevap

9

Yeni dosya tanıtıcılar eklemek için epoll_ctl(2) arabirimi, bir int fd argümanını alır, bu nedenle zaten 32-bit aralığıyla sınırlısınız (en azından aşina olduğum Linux platformlarında).

Tüm işlemler için açık dosya sayısında /proc/sys/fs/file-max sistem çapında sınırlama ile sınırlandırılmıştır; Sistemimde /proc/sys/fs/file-max şu anda 595956 olduğunu. Her bir işlem, açık dosya sayısı üzerindeki işlem başına setrlimit(2)RLIMIT_NOFILE işlem sınırı ile sınırlandırılmıştır. 1024, yaygın bir RLIMIT_NOFILE limiti. (Bu sınırı /etc/security/limits.conf aracılığıyla değiştirmek çok kolaydır.)

1024'ten daha fazlasına gereksinim duyan nadir bir uygulama. 32 bitlik tam 32 bit görünüyor, çünkü her bir açık dosya temsili bir miktar bellek alacaktır - dört milyar ~ 280 bayt struct inode yapıları (minimumda) tutturulmuş belleğin bir lot'udur.

+0

Teşekkürler, o zaman kullanım için biraz para verebilirim. –

2

2 milyar dosya tanıtıcısını açık olarak kullanmayı planlıyor musunuz ve işletim sisteminin bunu ele almasını bekliyor musunuz?

Çoğu * nix'te, bir FD döndüren işlevler int olarak döndürür, < 0 geçersiz bir tanımlayıcıdır. Bu işlevler FD'leri int'da döndürür, böylece tür aralığı FD'lerin aralığıdır. (Eksi negatifler (amaçlanan herhangi bir amaç yok)) Ben de aynı elbiseyi kullanıyorum: int.

1

Sert üst sınırın 1024 * 1024 olduğunu gösteren bir yorum bulunamadı.

-1

64 bit'deki dosya tanıtıcıları aralığı (32 bit sistem için de geçerlidir) Linux 0 ila 1023, daha sonra 1023 açık dosya tanıtıcısı oluşturamazsınız. Daha sonra 1023 dosya-tanımlayıcısını açmaya çalışırsınız, sonra sistem hata EBADF (Hatalı dosya tanımlayıcı), hata no - -9 değerini döndürecektir.