【发布时间】:2013-07-29 18:33:18
【问题描述】:
在Linux中cfopen最多可以同时打开多少个文件?
【问题讨论】:
-
又短又甜。这取决于。
-
取决于其他程序打开了多少文件,以及硬编码内核限制,以及各种
ulimits。 -
FOPEN_MAX
在Linux中cfopen最多可以同时打开多少个文件?
【问题讨论】:
ulimits。
FOPEN_MAX实现需要在<stdio.h>中提供FOPEN_MAX。这是实现保证可以同时打开的最小文件数。您可能可以打开更多,但知道这一点的唯一方法是测试。
请注意,内核限制与此不同——它告诉您可以(可能)使用open、creat 和其他操作系统调用打开多少文件。您的 C 实现的标准库可以(并且通常会)施加其自己的限制(例如,通过静态分配 FILE 的数组)。理论上,您可以打开的最大数字是内核和库实现施加的限制中的最小值——但内核的限制几乎总是(很多)更高。
一般来说,如果您关心这一点,那么您可能做错了什么。
【讨论】:
您可以通过执行以下操作查看允许的最大打开文件数(内核限制):
cat /proc/sys/fs/file-max
file-max中的值表示file-max的最大数量 Linux 内核将分配的句柄。当你得到很多 关于文件句柄用完的错误消息,您可能 想提高这个限制。
【讨论】:
ulimit -n
此代码应该告诉您机器上的最大值。在同一文件夹中创建一个文件“test”并运行它。它基本上会一直打开文件,直到它不能再打开为止。
# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <sys/wait.h>
# include <string.h>
# include <fcntl.h>
int main(){
int t;
for(;;){
t = open("test", O_RDONLY);
if (t < 0){
perror("open");
exit(1);
}
printf("%d: ok\n", t);
}
}
【讨论】:
它是由 POSIX 标准定义的。删除它会导致可移植性问题。此外,glibc.info 中提到了这个宏(至少在 redhat-7.1 中)。请参考下面的链接 OPEN_MAX not defined in limits.h.
【讨论】: