Не могу взять адрес сетевого интерфейса. Может кто посоветует что?(где копать или в чём ошибся).
Заранее благодарю.Вот текст прграммы:
----------------------------------------
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/ioctl.h>
#include <linux/if.h>
#include <linux/in.h>
char * intf = "eth0";
int main ()
{struct ifparam
{
__u32 ip;
__u32 mask;
int mtu;
int index;
} ifp;
int fd;
struct sockaddr_in s;
struct ifreq ifr;memset ((void *)&ifr, 0, sizeof (struct ifreq));
if ((fd = socket (AF_INET, SOCK_DGRAM, 0))<0)
return -1;
sprintf (ifr.ifr_name, "%s", intf);
memset ((void *)&s, 0, sizeof (struct sockaddr_in));
memcpy ((void *)&s, (void *)&ifr.ifr_addr, sizeof (struct sockaddr_in));
memcpy ((void *)&ifp.ip, (void *)&s.sin_addr.s_addr, sizeof (__u32));printf ("%s\n", inet_ntoa(ifp.ip));
return ifp.ip;
}
-----------------------------------------------------------
Вот вывод программы: 0.0.0.0Почему так?
С уважением,
Андрей.
> memset ((void *)&ifr, 0, sizeof (struct ifreq));
> if ((fd = socket (AF_INET, SOCK_DGRAM, 0))<0)
> return -1;
>
> sprintf (ifr.ifr_name, "%s", intf);
>
> memset ((void *)&s, 0, sizeof (struct sockaddr_in));
> memcpy ((void *)&s, (void *)&ifr.ifr_addr, sizeof (struct sockaddr_in));
> memcpy ((void *)&ifp.ip, (void *)&s.sin_addr.s_addr, sizeof (__u32));Ты же здесь ничег не далаешь. Берешь поля из пустойструктуры.
Здесь это разбиралась:
http://www.linux.org.ru/view-message.jsp?msgid=718999&back=g...
>
>Ты же здесь ничег не далаешь. Берешь поля из пустойструктуры.
>
>Здесь это разбиралась:
>http://www.linux.org.ru/view-message.jsp?msgid=718999&back=g...Спасибо.
Ты забыл вызвать ioctl.
>Ты забыл вызвать ioctl.Спасибо.