我们正在将 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
是如何工作的,以及我需要修复哪个 header 吗? 最佳答案
从 Oracle 的文档来看,Solaris 遵循的最大文件描述符似乎存在“硬限制”。但是,可以通过将以下行添加到 /etc/system
并重新启动来更改此设置:
set rlim_fd_max = 65536
上面的行将硬限制设置为 65536。一旦设置了这个硬限制,您就可以使用
ulimit
内核函数调用更改此属性的“运行”值,或者如您在具有系统的 C 应用程序中所示调用 ulimit(...)
和 select(...)
。来源:
http://docs.oracle.com/cd/E19644-01/817-5051/pt_tuningos.html#wp57451
关于c - ulimit(UL_GDESLIM, 0) 和 select 如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19849217/