ulimit(UL_GDESLIM,0)如何选择工作?

时间:2013-11-08 00:00:56

标签: c unix

我们正在将我们的C应用程序从Solaris 8迁移到Solaris 10.我在Solaris 10上运行此代码时遇到错误。我正在使用32位gcc编译器。

nFDs = ulimit(UL_GDESLIM, 0);
n=select(nFDs, &set, NULL, NULL, NULL);

错误:

Error : GetKey_(): select(): Invalid argument

我知道为什么会收到此错误,因为nFDs超过1024。 以下是select.h

#ifdef  _LP64 
#define  FD_SETSIZE      65536 
#else 
#define  FD_SETSIZE      1024

您能否指点我ulimit(UL_GDESLIM, 0)select的工作原理以及我需要修复的标题?

1 个答案:

答案 0 :(得分:1)

从Oracle的文档中可以看出,Solaris遵循的最大文件描述符存在“硬限制”。但是,可以通过将以下行添加到/etc/system并重新启动来更改:

set rlim_fd_max = 65536

上面的行将硬限制设置为65536.一旦设置了此硬限制,您就可以然后使用ulimit内核函数更改此属性的“运行”值在系统调用ulimit(...)select(...)的C应用程序中调用或显示。

来源: http://docs.oracle.com/cd/E19644-01/817-5051/pt_tuningos.html#wp57451