diff options
Diffstat (limited to 'misc/ioctltst.c')
-rw-r--r-- | misc/ioctltst.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/misc/ioctltst.c b/misc/ioctltst.c new file mode 100644 index 0000000..3e8ea99 --- /dev/null +++ b/misc/ioctltst.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <net/if.h> +#include <netinet/in.h> + +/* + * open a socket, get the process group information of the socket, and use the + * socket to get the network interface configuration list + */ +main() +{ + int sock; + int ioctl_result; + + /* get a socket */ + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock < 0) + { + perror("Cannot create socket"); + exit(1); + } + + /* use ioctl() to get the process group information */ + { + int get_process_group; + + ioctl_result = ioctl(sock, SIOCGPGRP, (char *) &get_process_group); + + if (ioctl_result < 0) + { + int my_errno = errno; + + fprintf(stderr, "errno %d ", my_errno); + perror("ioctl(get process group)"); + } + } + + /* use ioctl() to get the interface configuration list */ + { + static struct ifconf ifc; /* init to 0 */ + + ioctl_result = ioctl(sock, SIOCGIFCONF, (char *) &ifc); + + if (ioctl_result < 0) + { + int my_errno = errno; + + fprintf(stderr, "errno %d ", my_errno); + perror("ioctl(get interface configuration list)"); + } + } +} |