ioctlは、デバイスを制御するのに使う。
今回は、ネットワークデバイスであるNICからIPを取得する。
ioctl.cで、
インターフェース名を入力。
ioctlでSIOCGIFADDRを送る。
成功するとstruct ifreq型のsifrに情報が格納される。
$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::3b07:5151:e763:f8b0 prefixlen 64 scopeid 0x20<link> ether 08:00:27:75:6b:bc txqueuelen 1000 (Ethernet) RX packets 60323 bytes 13211145 (12.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 60397 bytes 8129752 (7.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 20 bytes 1720 (1.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 1720 (1.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 $ vi ioctl.c $ gcc ioctl.c -o ioctl $ ./ioctl interface_name: enp0s3 enp0s3 ip address = 10.0.2.15 $
IPが出力された。
Sample/unixsyscall/ioctl/ioctl/src/ioctl at master · bg1bgst333/Sample · GitHub