select中文件描述符上限为什么是1024?

一、两个1024

select中存放文件描述符的数组大小FD_SETSIZE为1024
进程的文件描述符上限默认是1024,正是因为这个原因,select设计时才把数组大小设计为1024

二、问题来了

进程的文件描述符上限是可以手动修改的

# 查看进程的文件描述符上限
ulimit -n

# 修改进程的文件描述符上限为2048,临时修改,只对当前shell有效
ulimit -SHn 2048

# 永久修改:编辑/etc/security/limits.conf
vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536

但是select的数组大小改不了 (╯‵□′)╯︵┻━┻,要改只能重新编译内核

三、扩展一下

除了每个进程的文件描述符有上限以外,系统还有一个总的上限,默认是100262

# 查看系统的文件描述符上限,方法一
sysctl -a | grep file-max

# 查看系统的文件描述符上限,方法二
cat /proc/sys/fs/file-max

# 修改系统的文件描述符上限
sysctl -w fs.file-max=2048
# 使修改生效
sysctl -p

你可能感兴趣的:(Linux)