Как мне использовать несколько аргументов из массива для создания вызова execl () в C? - PullRequest
4 голосов
/ 10 апреля 2010

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

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

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

... как я могу в итоге создать execl() вызов:

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

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

Ответы [ 3 ]

7 голосов
/ 10 апреля 2010

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

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

{"/bin/ls","ls","-a","-l", NULL} 
6 голосов
/ 10 апреля 2010

Взят прямо из "man execl"

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

EDIT: Вот прототипы.

int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
3 голосов
/ 10 апреля 2010

Сначала убедитесь, что ваш массив args [] имеет нулевой указатель в качестве последнего элемента, затем вызовите

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...