Проблемный код:
Код: Выделить всё
struct in_addr ip, mask, gate, dns;
if (0 == strcmp(data, "net")) {
ip.s_addr = net_get_ifaddr("eth0");
mask.s_addr = net_get_netmask("eth0");
gate.s_addr = net_get_gateway();
dns.s_addr = net_get_dns();
printf("Content-Type: text/plain\n\n"
"{\"result\": \"OK\","
"\"ip\": \"%s\", \"mask\": \"%s\"}",
inet_ntoa(ip), inet_ntoa(mask));
При данном коде в результате везде результат последнего вызова inet_ntoa.
Работающий код:
Код: Выделить всё
struct in_addr ip, mask, gate, dns;
if (0 == strcmp(data, "net")) {
char str_ip[20];
char str_mask[20];
ip.s_addr = net_get_ifaddr("eth0");
mask.s_addr = net_get_netmask("eth0");
gate.s_addr = net_get_gateway();
dns.s_addr = net_get_dns();
strncpy(str_mask,inet_ntoa(mask),20);
strncpy(str_ip,inet_ntoa(ip),20);
printf("Content-Type: text/plain\n\n"
"{\"result\": \"OK\","
"\"ip\": \"%s\", \"mask\": \"%s\"}",
str_ip, str_mask);
Работающий код с последовательными вызовами inet_ntoa:
Код: Выделить всё
SysInfo *pSysInfo;
if (0 == strcmp(data, "net")) {
printf("Content-Type: text/plain\n\n"
"{\"result\": \"OK\","
"\"mac\": \"%02x:%02x:%02x:%02x:%02x:%02x\", "
"\"ip\": \"%s\", \"mask\": \"%s\", "
"\"gate\": \"%s\", \"dns\": \"%s\"}",
"\"dhcp\": %d, \"dhcp_config\": %d}",
pSysInfo->lan_config.net.MAC[0],
pSysInfo->lan_config.net.MAC[1],
pSysInfo->lan_config.net.MAC[2],
pSysInfo->lan_config.net.MAC[3],
pSysInfo->lan_config.net.MAC[4],
pSysInfo->lan_config.net.MAC[5],
inet_ntoa(pSysInfo->lan_config.net.ip),
inet_ntoa(pSysInfo->lan_config.net.netmask),
inet_ntoa(pSysInfo->lan_config.net.gateway),
inet_ntoa(pSysInfo->lan_config.net.dns),
pSysInfo->lan_config.net.dhcp_enable,
pSysInfo->lan_config.net.dhcp_config);
Я не совсем понимаю, почему при вызове inet_ntoa с структурой не наблюдается переписывание предыдущих вызовов inet_ntoa.
Спасибо.