Как добавить в *argv для execv?

#linux #ubuntu #c #arrays #exec

Вопрос:

Допустим, я хочу удалить что-то с помощью execv, но я еще не знаю, что удалить.

 char *argv[] = {"rm", "-r"};
 

Теперь я знаю! Как мне добавить в argv? Как закончить его НУЛЕМ? Спасибо!

Ответ №1:

Если вы хотите вставить одно имя файла, фиксированное количество имен файлов или определенное максимальное количество имен файлов, вы можете статически определить и инициализировать массив указателей с нулевыми указателями в качестве заполнителей

 /* placeholder for two file names and terminating NULL pointer */
char *argv[] = {"rm", "-r", NULL, NULL, NULL};
 

и замените NULL указатель(указатели) в индексе 2 (и 3) одним или двумя именами файлов позже

 char filename1[1024];
char filename2[1024];

/* input or construct filenames as strings somehow */

argv[2] = filename1;
argv[3] = filename2;
 

Если вам нужно обработать неизвестное количество имен файлов, возможно, вам придется динамически выделить массив указателей требуемого размера.