在Linux上,当一个进程打开一个文件时,操作系统会检查最大打开文件数的限制。
如果限制为1024,这个数字代表什么?
它表示:
- 进程打开的文件数量
- 拥有该进程的用户打开的文件数量
- 当前操作系统中所有打开文件的数量
ulimit -a
命令检查系统的软限制和硬限制。open
、pipe
和dup
系统调用将失败:
RLIMIT_NOFILE:
指定了可以由此进程打开的最大文件描述符号码加1的值。尝试(
open(2)
,pipe(2)
,dup(2)
等)超过此限制会得到错误EMFILE
。
这是每个进程的已打开文件描述符数量。它们可以都指向同一个文件,也可以指向不同的文件。
您可以使用shell中的ulimit -a
查看当前限制,或者使用getrlimit
进行编程实现。系统范围的限制在/etc/security/limits.conf
中设置。
Linux上的文件系统对象模型为:
file descriptor -> file description -> dentry -> inode
dup
创建指向相同 文件描述符 的新文件描述符。open
创建一个新的 文件描述符 和一个新的文件描述。
ulimit -a
它将告诉您系统中打开文件数量的限制,因为在Linux中有一种方法可以限制打开文件的数量,并且还可以将打开文件的限制设置为无限制,从而解决该问题。