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

nFDs1024 を超えているため、このエラーが発生した理由がわかりました。以下はselect.h

#ifdef  _LP64 
#define  FD_SETSIZE      65536 
#else 
#define  FD_SETSIZE      1024

ulimit(UL_GDESLIM, 0)と がどのようにselect機能し、どのヘッダーを修正する必要があるかを教えてください。

4

1 に答える 1

1

Oracle のドキュメントによると、Solaris が従うファイル記述子の最大数には「ハード リミット」があるようです。ただし、これは次の行を追加して/etc/system再起動することで変更できます。

set rlim_fd_max = 65536

上記の行は、ハード リミットを 65536 に設定します。このハード リミットが設定されると、カーネル関数呼び出しを使用して、またはシステム コールを使用して C アプリケーション内から示したように、このプロパティの「実行中」の値を変更できulimitます。と. ulimit(...)_select(...)

ソース: http://docs.oracle.com/cd/E19644-01/817-5051/pt_tuningos.html#wp57451

于 2013-11-08T02:30:08.097 に答える