我们正在将我们的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
的工作原理以及我需要修复的标题?
答案 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