Через какие библиотченые функции/системные вызовы можно такое сделать? Задача банальная - узнать, есть ли в списке адресов машины искомый, только вот пока ничего некостыльного в голову не приходит =(
Спасибо за совет! Со вторым вопросов не возникает, поэтому я попробовал первый вариант =)
И сразу наткнулся на проблему. Вот код программы:
15 int main() {
16
17 int sockfd, iores = 0;
18 struct ifconf ifcnf;
19
20 memset(&ifcnf, '\0', sizeof(ifcnf));
21 sockfd = socket(PF_INET, SOCK_DGRAM, 0);
22
23 iores = ioctl(sockfd, SIOCGIFCONF, &ifcnf);
24
25 return 0;
26 }
А вот что показывает gdb:
(gdb) break test.c:22
Breakpoint 1 at 0x80483db: file test.c, line 22.
(gdb) run
Starting program: /home/me/sources/a.out
Breakpoint 1, main () at test.c:23
23 iores = ioctl(sockfd, SIOCGIFCONF, &ifcnf);
(gdb) display ifcnf
1: ifcnf = {ifc_len = 0, ifc_ifcu = {ifcu_buf = 0x0, ifcu_req = 0x0}}
(gdb) n
25 return 0;
1: ifcnf = {ifc_len = 64, ifc_ifcu = {ifcu_buf = 0x0, ifcu_req = 0x0}}
(gdb) display iores
2: iores = 0
(gdb)
Получается, что ioctl сработал без ошибок. Но все изменения, которые он сделал со структурой ifcnf - только изменил значение её поля ifc_len на 64. Что я делаю не так?