В Solaris вы создаете 64-битные программы, используя либо:
cc -xarch=v9 ...
Или:
gcc -m64 ...
Как сказал Эван, фундаментальная проблема для 32-битного Solaris - обратная двоичная совместимость и 8-битное целое число, используемое для хранения fd.
Я только что попробовал этот код на Solaris 10 для SPARC:
#include <stdio.h>
int main(void)
{
size_t i;
for (i = 0; i < 300; i++)
{
FILE *fp = fopen("/dev/null", "a");
if (fp == 0)
{
printf("Failed on %zu\n", i);
return(1);
}
}
printf("Succeeded to %zu\n", i);
return(0);
}
Составлено как:
cc -xarch=v9 -o xxx xxx.c
И это дало мне «провал на 253». (Это тестовый код: я знаю, что он выбрасывает 252 указателя.) Это поддерживает ваше утверждение о том, что простая 64-битная сборка. Тем не менее, есть еще один фактор - ограниченность ресурсов.
$ ulimit -n
256
$
Итак, увеличение лимита по умолчанию с:
$ ulimit -n 400
$ ulimit -n
400
$ ./xxx
Succeeded to 300
$
Попробуй это ...