struct ifaddrs {
struct ifaddrs *ifa_next;
char *ifa_name;
unsigned int ifa_flags;
struct sockaddr *ifa_addr;
struct sockaddr *ifa_netmask;
struct sockaddr *ifa_dstaddr;
void *ifa_data;
};
struct ifaddrs *addrs,*tmp;
if(getifaddrs(&addrs) != 0) {
perror("getifaddrs");
return 1;
}
for(tmp = addrs; tmp ; tmp = tmp->ifa_next) {
}
Я видел этот код getifaddrs
получая результаты в ifaddrs
. Но IterationИтерация через связанный список ifaddr
для цикла пробивает все интерфейсы, которые он может найти.
for(tmp = addrs; tmp ; tmp = tmp->ifa_next) {
}
Вопрос заключается в том, я не вижу, как tmp->ifa_next
указатель увеличивается или идти к следующей ссылке.
Он не увеличивается, это еще один указатель на каждой итерации. Попробуйте добавить 'fprintf (stderr,"% p ->% p \ n ", tmp, tmp-> ifa_next);' внутри тела цикла, и вы увидите. – wildplasser
из-за 'tmp = tmp-> ifa_next' –
BTW: нет двойного связанного списка. Вы смущены указателем на указатель? – wildplasser