Как я использую несколько аргументов от массива для построения execl () вызов в C?

У меня есть массив строк в названном C args[] - теперь, как я могу использовать этот список аргументов для построения надлежащего вызова к execl()?

Таким образом, если массив содержит:

{"/bin/ls","ls","-a","-l"} 

... как я могу в конечном счете создать execl() звоните, который является:

execl("/bin/ls","ls","-a","-l",NULL);

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

6
задан chucknelson 10 April 2010 в 15:53
поделиться

3 ответа

Взято непосредственно из "man execl"

Функции execv () и execvp () предоставляют массив указателей на {{1 }} строки с завершающим нулем, которые представляют список аргументов, доступных для новой программы. Первый аргумент по соглашению должен указывать на имя файла, связанного с исполняемым файлом. Массив указателей должен заканчиваться указателем NULL.

РЕДАКТИРОВАТЬ: Вот прототипы.

int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
8
ответ дан 8 December 2019 в 12:19
поделиться

Если у вас есть массив, который вы хотите передать одному из семейства exec * , вы должны использовать execv , а не execl .

Ваш массив должен заканчиваться NULL-указателем, которого в настоящее время нет:

{"/bin/ls","ls","-a","-l", NULL} 
8
ответ дан 8 December 2019 в 12:19
поделиться

Во-первых, убедитесь, что ваш массив args[] имеет указатель NULL в качестве последнего элемента, затем вызовите

execv(args[0], &args[1]);

3
ответ дан 8 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: