Wietse Venema: > Do you need code for testing the sysctl() stuff? To make the job easier, below is a patch to unmodified open_limit.c
Wietse *** ./open_limit.c- Fri Dec 11 13:55:29 1998 --- ./open_limit.c Fri Mar 22 15:44:13 2013 *************** *** 34,39 **** --- 34,48 ---- #include <sys/resource.h> #include <errno.h> + /* + * XXX MacOSX rlim_cur is only 256, rlim_max is infinite, so we use the + * kern.maxfilesperproc value instead. + */ + #ifdef MACOSX + #include <sys/sysctl.h> + #define MAX_FILES_PER_PROC "kern.maxfilesperproc" + #endif + /* Application-specific. */ #include "iostuff.h" *************** *** 63,68 **** --- 72,87 ---- if (getrlimit(RLIMIT_NOFILE, &rl) < 0) return (-1); if (limit > 0) { + #ifdef MACOSX + long current_limit; + size_t len = sizeof(current_limit); + + if (sysctlbyname(MAX_FILES_PER_PROC, ¤t_limit, &len, + (void *) 0, (size_t) 0) < 0) + return (-1); + if (limit > current_limit) + limit = current_limit; + #endif if (limit > rl.rlim_max) rl.rlim_cur = rl.rlim_max; else