LINUX.ORG.RU

демоном еe надо пускать через fork()+exec()

Dead ★★★★
()

>popen() и system() не подходят.

Вообщето system тебе точно поможет

ну а если не нравится то ещё существует daemon (3) и *двойной* fork()

cvv ★★★★★
()
Ответ на: комментарий от anonymous

Почитал я man по fork, daemon 3 и execve.

Что как эти функции могут мне помочь.

Если не влом, привидите пример, плиzzz

anonymous
()
Ответ на: комментарий от anonymous

С exec'ом запускается, но нужно вводить абсолютный путь к бинарнику.
Не знаете как реализовать запуск типа косольного.
Известно только имя проги, установленной на системе.
Например "kdf" или "gimp-2.0"

Как запустить используя exec? Или другими средствами.

anonymous
()
Ответ на: комментарий от anonymous

прочитать переменную окружения PATH и выбрать из предложенных
вариантов. только есть такое правило: DON'T TRUST ENVIRONMENT.
для setuid прог это закон...

так что вы сам себе злой буратино...

signal11
()

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.

Murr ★★
()
Ответ на: комментарий от Murr

Вот system() или popen() скидывают в консоль и им начихать...

Может есть какие нибудь средства для работы с консолью?

popen() делает то что надо. Он не ждет завершения работы программы, может возможно...

Хотя ладно, буду работать с fork & exec

Алгоритм такой:
-С помощью popen() считываем $PATH в char[] переменную("echo $PATH")
-Забиваем массив разделяя слова ":"
-Пробегаемся по массиву, определяя есть ли файл path[]+"/kdf"
-Если находим - запуск
-Если нет - облом

Вроде бы так. Во всех своих прогах я выделяю переменные окружения таким образом - "echo $..."
Правильно ли это, может есть иные средства? Какими вы пользуетесь.

И еще... На С++ я пока учусь, на паскале раньше сидел. Привык, если строки - значит индексы. А здесь все функции поиска возвращают указатели(<string.h>) Как то неудобно...
<---Дальше идет полное ламерство, слабонервным отвернуться--->
Посоветуйте, как выделить эти пути разделенные ":"
Какие-то функции я писал по определению индекса по указателю, но сомневаюсь в надежности...

anonymous
()
Ответ на: комментарий от anonymous

>Вроде бы так. Во всех своих прогах я выделяю переменные окружения таким образом - "echo $..." Правильно ли это, может есть иные средства? Какими вы пользуетесь.

man getenv

Dead ★★★★
()
Ответ на: комментарий от anonymous

>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.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.