аргументы execl () [closed]

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

Я могу сделать это с помощью execv (args [0], args) . Как мне преобразовать execv () в execl ()?

спасибо.

1
задан 9 December 2016 в 20:02

1 ответ

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

Более общая функция execv; execl своего рода стенография, когда количество аргументов известно и позволяет программисту стараться не создавать argv[] массив.

Так или иначе, для ответа на вопрос, как спросили: необходимо знать заранее максимальное количество аргументов, которые будут переданы программе, чтобы быть execd. Если Вы знаете максимальное количество аргументов затем, можно подготовить заранее вызов к 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[] это не представляет различия в эффектах этих двух вызовов функции.)

1
ответ дан 7 December 2019 в 15:43

Другие вопросы по тегам:

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