每一个特定的系统都会有其资源的 limits ,这些限制有的时候在 runtime 用到,或者在 runtime 进行确定。 #include unistd.h long sysconf( int name )" name="description" />
MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每一个特定的系统都会有其资源的limits,这些限制有的时候在runtime用到,或者在runtime进行确定。
#include <unistd.h>
long sysconf( int name )
使用sysconfig(_ SC_OPEN_MAX )可以获得进程打开文件的最大值
文件描述符 file descriptor fds
对于内核而言,所有打开文件的由fds引用。Fds为非负整数当打开文件或者create文件的时候,内核向进程返回一个fds。
现在,在实际的机器上作下测试(环境 sparc platform solaris 8 on sun blade 150)
# cd proc
# ls 下面列出系统得进程
0 188 238 276 3191 328 361 4621 4754 585 610 630 667
# cd 188
# ls
cred fd lusage object rmap status xmap
# cd fd
# ls
0 1 2 256 3 4 5
# cd . .
# cd . .
# cd 238
# cd fd
# ls
0 1 2 3 4 5 6 7 9
可以看出,fd并非是唯一的每一个进程都有对应的fd。
通常在shell中 0,1,2对应着标准输入,标准输出,错误。
文件描述符的范围是0~OPEN_MAX
那么下面的代码也容易理解了
# include <unistd.h>
for ( i = 0; i < sysconf (_SC_OPEN_MAX ); i ++)
close ( i );
通常这代码序列存在于守护进程,用来关闭所有的打开文件。
在UNIX的标准中,OPEN_MAX在一个进程的生命周期中,是不可改变的,可是,商业化的UNIX,
UNIX SYSTEM V是可以通过setrlimit()函数动态的改变打开文件数的限制。
参考:Advanced Programming in The Unix Environment .作者: Steven