我们正在将我们的 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/