From e74c9a80aef985173be309d5a3dca8abc2965638 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Wed, 4 May 2011 19:10:53 +0400 Subject: [PATCH] syscall() example --- c/sysctl_ex/_sysctl_ex.c | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 c/sysctl_ex/_sysctl_ex.c diff --git a/c/sysctl_ex/_sysctl_ex.c b/c/sysctl_ex/_sysctl_ex.c new file mode 100644 index 0000000..c0ad58a --- /dev/null +++ b/c/sysctl_ex/_sysctl_ex.c @@ -0,0 +1,63 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include + +int _sysctl(struct __sysctl_args *args ); + +#define OSNAMESZ 100 +void test0_osname() +{ + struct __sysctl_args args; + char osname[OSNAMESZ]; + size_t osnamelth; + int name[] = { CTL_KERN, KERN_OSTYPE }; + + memset(&args, 0, sizeof(struct __sysctl_args)); + args.name = name; + args.nlen = sizeof(name)/sizeof(name[0]); + args.oldval = osname; + args.oldlenp = &osnamelth; + + osnamelth = sizeof(osname); + + if (syscall(SYS__sysctl, &args) == -1) { + perror("_sysctl"); + exit(EXIT_FAILURE); + } + printf("This machine is running %*s\n", (int)osnamelth, osname); +} + +void test1_tcp_max_syn_backlog() +{ + struct __sysctl_args args; + int var; + size_t var_len; + int name[] = { CTL_NET, NET_IPV4, NET_TCP_MAX_SYN_BACKLOG }; + + memset(&args, 0, sizeof(struct __sysctl_args)); + args.name = name; + args.nlen = sizeof(name)/sizeof(name[0]); + args.oldval = &var; + args.oldlenp = &var_len; + + if (syscall(SYS__sysctl, &args) == -1) { + perror("_sysctl"); + exit(EXIT_FAILURE); + } + printf("NET_TCP_MAX_SYN_BACKLOG = %u\n", var); +} + +int +main(void) +{ + test0_osname(); + + test1_tcp_max_syn_backlog(); + + exit(EXIT_SUCCESS); +}