Как я могу использовать функцию execl () с аргументами, которые вводятся пользователем в C?
Я могу сделать это с помощью execv (args [0], args)
. Как мне преобразовать execv () в execl ()?
спасибо.
execv
и execl
сделайте точно то же самое с различием это execl
предназначается для использования, когда Вы знаете заранее количество параметров командной строки в то время как execv
позволяет количеству аргументов быть динамично определенным.
Более общая функция execv
; execl
своего рода стенография, когда количество аргументов известно и позволяет программисту стараться не создавать argv[]
массив.
Так или иначе, для ответа на вопрос, как спросили: необходимо знать заранее максимальное количество аргументов, которые будут переданы программе, чтобы быть exec
d. Если Вы знаете максимальное количество аргументов затем, можно подготовить заранее вызов к execl
раскручивание массива аргументов.
Предположим, что Вы имеете:
char * exec_argv [21];
char * exec_pathname;
Следующие два вызова эквивалентны для любого легального содержания массива аргументов exec_argv[]
:
execv (exec_pathname, exec_argv);
execl (exec_pathname,
exec_argv [0], exec_argv [1], exec_argv [2], exec_argv [3],
exec_argv [4], exec_argv [5], exec_argv [6], exec_argv [7],
exec_argv [8], exec_argv [9], exec_argv [10], exec_argv [11],
exec_argv [12], exec_argv [13], exec_argv [14], exec_argv [15],
exec_argv [16], exec_argv [17], exec_argv [18], exec_argv [19],
NULL
);
(Последний аргумент execl
NULL
вместо exec_argv[20]
потому что gcc
будет искать его, если вызвано с -Wall
; с тех пор должен быть a NULL
где-нибудь в exec_args[]
это не представляет различия в эффектах этих двух вызовов функции.)