У меня есть многомерный массив, содержащий IP-адреса и соответствующие им шлюзы. Структура массива показана ниже. Я хотел бы пройтись по массиву и назначить первый столбец IP-адресов моему сетевому интерфейсу. Я ожидаю, что интерфейсу в какой-то момент будет назначено несколько IP-адресов. Позже я намерен добавить функцию пинга шлюзов.
Кажется, я не могу получить значение только первого столбца, который можно использовать для выполнения моей команды. Я уверен, что неправильно ссылаюсь на массив. Вот что у меня есть до сих пор.
char eth0IntName[256];
const char *arrayIPAddress[3][2] = {
{"192.168.16.65", "192.168.16.66"},
{"192.168.17.65", "192.168.17.66"},
{"192.168.18.65", "192.168.18.66"}};
int main(int argc, char *argv[])
{
char cmdStr[256];
strcpy(eth0IntName, "eth0");
for(int i=0; i<3; i++)
{
sprintf(cmdStr, "/sbin/ip addr add %s/30 dev %s", (char *)&arrayIPAddress[i][0], eth0IntName);
printf("Executing: /sbin/ip addr add %s/30 dev %s", (char *)&arrayIPAddress[i][0], eth0IntName);
}
return 0;
}
В строке sprintf я передаю (char *)&arrayIPAddress[i][0]. По какой-то причине это было бы какой-то странной болтовней. Я понял, что мне не нужно добавлять часть (char *)&, и это очистило ее. Я также понял, что на самом деле не выполнял команду. Мне нужно было добавить строку; система (кмдстр); перед строкой printf.
Я слишком усложнял это. Моя линия sprintf была неправильной. Кроме того, мне нужно было выполнить команду. Я добавил систему (cmdStr); после этой строки. Вот как теперь выглядит код.
char eth0IntName[256];
const char *arrayIPAddress[3][2] = {
{"192.168.16.65", "192.168.16.66"},
{"192.168.17.65", "192.168.17.66"},
{"192.168.18.65", "192.168.18.66"}};
int main(int argc, char *argv[])
{
char cmdStr[256];
strcpy(eth0IntName, "eth0");
for(int i=0; i<3; i++)
{
sprintf(cmdStr, "/sbin/ip addr add %s/30 dev %s", arrayIPAddress[i][0], eth0IntName);
system(cmdStr);
printf("Executing: /sbin/ip addr add %s/30 dev %s", arrayIPAddress[i][0], eth0IntName);
}
return 0;
}
Вы можете переместить последнюю строку printf
перед вызовом system
. Кроме того, вы можете добавить fflush(stdout);
после printf
, но перед вызовом system
, чтобы убедиться, что строка printf
была выведена на экран и не ожидает в буфере, пока выполняется вызов функции system
.
Каковы симптомы? Что вы получаете? В чем разница с тем, что вы хотите?