我正在编写一个程序,使用epoll_wait在64位Linux上等待文件描述符,并尝试将一些信息与epoll_event用户数据一起放置。
我知道实际上文件描述符不太可能超过32位。只是想知道内核是否保证文件描述符具有特定的范围,还是仅从小计数并且不太可能变得非常大?
我正在编写一个程序,使用epoll_wait在64位Linux上等待文件描述符,并尝试将一些信息与epoll_event用户数据一起放置。
我知道实际上文件描述符不太可能超过32位。只是想知道内核是否保证文件描述符具有特定的范围,还是仅从小计数并且不太可能变得非常大?
epoll_ctl(2)
接口添加新的文件描述符需要一个int fd
参数,因此在我熟悉的Linux平台上,您已经受到32位范围的限制。/proc/sys/fs/file-max
系统范围内对所有进程打开的文件数的限制;/proc/sys/fs/file-max
当前在我的系统上为595956
。setrlimit(2)
RLIMIT_NOFILE
每个进程对打开文件数量的限制。1024是常见的RLIMIT_NOFILE
限制。 (可以通过/etc/security/limits.conf
轻松更改此限制。)struct inode
结构(至少)占用了大量锁定内存。int
返回,其中< 0是无效描述符。这些函数使用int
返回FD,因此该类型的范围是FD的范围。(减去负数(无恶意))。我建议遵循相同的做法:使用相同的类型,即int
。我在内核中找到了一条评论,指出硬上限为1024*1024。
64位(也适用于32位系统)Linux上的文件描述符范围是0到1023,您不能创建超过1023个打开的文件描述符。如果您尝试打开超过1023个文件描述符,则系统将返回错误EBADF(坏文件描述符),错误编号为-9。