Вопрос

Я использую execv() для запуска команд из /bin/, таких как «ls», «pwd», «echo» из моей программы на C++, и мне интересно, какое значение мне следует указать в argv[0];

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
Это было полезно?

Решение

argv[0] должно быть именем программы.Он передан в программу main функция.Некоторые программы различают свое поведение в зависимости от того, какая строка argv[0] является.Например, ГНУ bash оболочка отключит некоторые из своих функций, если вызвать ее с помощью sh вместо bash.Лучше всего присвоить ему то же значение, которое вы передаете. path.

В Linux, argv[0] — это имя процесса, отображаемое top утилита (которую она, вероятно, получает при чтении записей в /proc/)

Другие советы

argv[0] должен быть полным путем к команде, которую вы хотите запустить.

Я знаю, что это не тот ответ, который вы ищете, но есть ли конкретная причина, по которой вы это делаете?Причина, по которой я спрашиваю, заключается в том, что большинство, если не все действия, которые люди обычно совершают либо system() или execv() доступны в библиотеках Windows или Unix и безопаснее, быстрее и с меньшей вероятностью страдают от косвенный ошибки.Я имею в виду, например, когда PATH меняется, и внезапно ваш код перестает работать.

Если вы передаете строку полностью или частично и запускаете ее, вы также оставляете себя открытым для пользователя, получающего доступ к системе путем ввода команды, которая может нанести вред.Например.представьте, что вы реализовали поиск файлов, используя find /home -name и ваш пользователь вводит:

"%" -exec rm {} \;

Ой!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top