#c #unix
Вопрос:
Поэтому я пытаюсь отправить простую команду ping через Execv и распечатать на терминале.
У меня есть исходная проблема с массивом строк неизвестных аргументов. a[n][50], который будет заполняться на протяжении всего выполнения процесса в соответствии с вводом пользователем. Я не могу использовать «execv» , я продолжаю получать «несовместимый тип указателя». Пытаясь проиллюстрировать проблему, я сделал только простой «пинг» «google.com»
int main(int argc, char const *argv[])
{
//That's what I have...
char a[3][50];
strcpy(a[0], "ping");
strcpy(a[1], "google.com");
//First try
a[2] = NULL;
execv(a[0], a);
//Second time, trying to fix, also didnt work
char *pointer[3];
pointer[0] = a[0];
pointer[1] = a[1];
pointer[2] = NULL;
execv(pointer[0], pointer);
return 0;
}
Есть ли какой-либо обходной путь без необходимости изменять формат a[n][50] для сохранения строк?
Комментарии:
1. 2-мерный массив-это не то же самое, что массив указателей.
2.
a[2] = NULL;
является недействительным.a[2]
является массивом, который вы не можете назначить массиву.3. Используйте
execvp()
, потому что вам нужно найтиping
в$PATH
4. Или измените
a[0]
, чтобы это был полный путь кping
программе.5. Для дальнейшего использования поставьте a
perror("execv failed");
послеexecv
, чтобы получить некоторую обратную связь при сбое вызова exec.
Ответ №1:
Вторая версия будет работать, но вам нужно использовать execvp()
вместо execv
, так как первый аргумент не является полным путем ping
программы.