On Thu, Mar 21, 2013 at 01:26:24PM -0400, Wietse Venema wrote:
> What does the following program print?
>
> -------
> #include <sys/types.h>
> #include <sys/sysctl.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> #define MAX_FILES_PER_PROC "kern.maxfilesperproc"
>
> #define perrorexit(text) do { perror(text); exit(1); } while (0)
>
> int main(int argc, char **argv)
> {
> int limit;
> int len = sizeof(limit);
>
> if (sysctlbyname(MAX_FILES_PER_PROC, &limit, &len,
> (void *) 0, (size_t) 0) < 0)
> perrorexit("sysctlbyname MAX_FILES_PER_PROC");
> printf("%d\n", limit);
> return (0);
> }
> -------
After chaning "int len" to "size_t len" and "int limit" to "long limit":
#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAX_FILES_PER_PROC "kern.maxfilesperproc"
#define perrorexit(text) do { perror(text); exit(1); } while (0)
int main(int argc, char **argv)
{
long limit;
int len = sizeof(limit);
if (sysctlbyname(MAX_FILES_PER_PROC, &limit, &len,
(void *) 0, (size_t) 0) < 0)
perrorexit("sysctlbyname MAX_FILES_PER_PROC");
printf("%ld\n", limit);
return (0);
}
it compiles and prints "10240". After running:
# sysctl -w kern.maxfilesperproc=10241
it prints "10241".
--
Viktor.