2016-09-23 3 views
0

У меня есть исполняемый файл, a.out который принимает несколько аргументов command-line. Этот исполняемый файл должен быть запущен с привилегиями root, например sudo ./a.out arg1 arg2 ....Как выполнить команду sudo bash с помощью функции execvp?

Как это сделать, используя системный вызов execvp в C++?

ответ

0
char *args[5]; 

args[0]="sudo"; 
args[1]="./a.out"; 
args[2]="arg1"; 
args[3]="arg2"; 
args[4]=NULL; 
execvp("sudo", args); 

Оболочка разделяет данную команду на слова с пробелами. Первое слово получает в PATH, и все слова передаются в качестве параметров в команду.

Sinec execvp() будет искать для вас PATH, вы можете просто передать «sudo» в качестве команды, а затем аргументы команды. Обратите внимание, что первым аргументом команды является имя команды.

Команда, которую вы выполняете, является «sudo», так что это первый аргумент; то остальные слова как отдельные аргументы, переданные как массив.

+0

Но не execvp принимает только два аргумента? – Jarvis

+0

Yup, упустил это. Исправил ответ. –

-1

Это не работает:? execvp ("/ usr/bin/sudo", "./a.out arg1 erg2").

+0

Что именно здесь первый аргумент? – Jarvis