С exec'ом запускается, но нужно вводить абсолютный путь к бинарнику.
Не знаете как реализовать запуск типа косольного.
Известно только имя проги, установленной на системе.
Например "kdf" или "gimp-2.0"
Как запустить используя exec? Или другими средствами.
прочитать переменную окружения PATH и выбрать из предложенных
вариантов. только есть такое правило: DON'T TRUST ENVIRONMENT.
для setuid прог это закон...
так что вы сам себе злой буратино...
fork+exec или posix_spawn/posix_spawnl.
Использование fork вроде как вполне очевидно:
rc = fork();
if (rc == -1) {
... // could not create process
}
if (rc == 0) {
execve("/path_to_my_program", argv, envp);
... // could not execute the program
}
... // do what we want in parent
Потом, возможно, будет интересно почитать про SIGCHLD и все, что с ним
связано. По поводу путей правильно сказали - надо быть осторожным в
неуказании полного пути, если программа - setuid или setgid.
Вот system() или popen() скидывают в консоль и им начихать...
Может есть какие нибудь средства для работы с консолью?
popen() делает то что надо. Он не ждет завершения работы программы, может возможно...
Хотя ладно, буду работать с fork & exec
Алгоритм такой:
-С помощью popen() считываем $PATH в char[] переменную("echo $PATH")
-Забиваем массив разделяя слова ":"
-Пробегаемся по массиву, определяя есть ли файл path[]+"/kdf"
-Если находим - запуск
-Если нет - облом
Вроде бы так. Во всех своих прогах я выделяю переменные окружения таким образом - "echo $..."
Правильно ли это, может есть иные средства? Какими вы пользуетесь.
И еще... На С++ я пока учусь, на паскале раньше сидел. Привык, если строки - значит индексы. А здесь все функции поиска возвращают указатели(<string.h>) Как то неудобно...
<---Дальше идет полное ламерство, слабонервным отвернуться--->
Посоветуйте, как выделить эти пути разделенные ":"
Какие-то функции я писал по определению индекса по указателю, но сомневаюсь в надежности...
>Вроде бы так. Во всех своих прогах я выделяю переменные окружения таким образом - "echo $..."
Правильно ли это, может есть иные средства? Какими вы пользуетесь.
>popen() делает то что надо. Он не ждет завершения работы программы, может возможно...
Не правильно. Он запускает процесс и открывает файл, из которого нужно читать его вывод. Если тот выведет много а ты не прочнешь, может случиться неприятность.
>С помощью popen() считываем $PATH в char[] переменную("echo $PATH")
man execlp в конце концов.
The functions execlp and execvp will duplicate the actions of the shell in searching for an executable file if the specified file name does not contain a slash (/) character.