У меня есть массив строк в названном C args[]
- теперь, как я могу использовать этот список аргументов для построения надлежащего вызова к execl()
?
Таким образом, если массив содержит:
{"/bin/ls","ls","-a","-l"}
... как я могу в конечном счете создать execl()
звоните, который является:
execl("/bin/ls","ls","-a","-l",NULL);
Я должен думать об этой несправедливости, поскольку я ничего не могу найти онлайн, просто говорить об определении функций, которые могут взять переменное количество аргументов.
Взято непосредственно из "man execl"
Функции execv () и execvp () предоставляют массив указателей на {{1 }} строки с завершающим нулем, которые представляют список аргументов, доступных для новой программы. Первый аргумент по соглашению должен указывать на имя файла, связанного с исполняемым файлом. Массив указателей должен заканчиваться указателем NULL.
РЕДАКТИРОВАТЬ: Вот прототипы.
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
Если у вас есть массив, который вы хотите передать одному из семейства exec *
, вы должны использовать execv
, а не execl
.
Ваш массив должен заканчиваться NULL-указателем, которого в настоящее время нет:
{"/bin/ls","ls","-a","-l", NULL}
Во-первых, убедитесь, что ваш массив args[] имеет указатель NULL в качестве последнего элемента, затем вызовите
execv(args[0], &args[1]);