c - ulimit(UL_GDESLIM, 0) 和 select 如何工作?

标签 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 的工作原理以及我需要修复哪个 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/

相关文章:

c - 需要帮助用 mingw 编译 jnlua

python - 无法连接到python中的抽象unix套接字

c - fork 两个子进程,一个计算 N 的和,另一个计算 N 的阶乘

mysql插入ip地址范围

java - 为什么 C 和 Java 对以下循环的处理方式不同

c - 在c文件的当前目录中打开并写入一个文件

c - 实现 strcpy : what if the destination is shorter than the source?

c - Exec() 和 Fork()

linux - Unix:列出具有特定结尾的文件并显示它们的大小和日期

C unix 套接字。需要处理的信号