我正在使用epoll_wait编写一个程序来等待64位
Linux上的文件描述符,并且我尝试将一些信息与文件描述符一起放在epoll_event用户数据中.
我知道实际上文件描述符不可能超过32位.只是想知道内核是否保证文件描述符具有特定的范围,或者它只是从小数量计算并且不太可能变得非常大?
解决方法
用于添加新文件描述符的epoll_ctl(2)接口采用int fd参数,因此您已经限制在32位范围内(至少在我熟悉的Linux平台上).
您还受到/ proc / sys / fs / file-max系统范围限制所有进程的打开文件数量的限制; / proc / sys / fs / file-max目前在我的系统上是595956.
通过对打开文件数量的setrlimit(2)RLIMIT_NOFILE每进程限制进一步限制每个进程. 1024是常见的RLIMIT_NOFILE限制. (通过/etc/security/limits.conf更改此限制非常容易.)
这是一个罕见的应用程序,需要超过1024.完整的32位似乎不太可能,因为每个打开的文件将需要一些内核内存来表示 – 40亿~280字节结构inode结构(至少)是很多固定记忆.