4

我们正在将 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)and的select工作原理以及我需要修复哪个标头?

4

1 回答 1

1

从 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

于 2013-11-08T02:30:08.097 回答