| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > запуск программы из другой программы |
| Автор: annushka89 28.4.2009, 18:01 |
| Спасибо сайту, уже неплохо освоила с++. Люди, скажите, можно ли написать программу(С,С++), и в коде одной программы что-то написать, чтобы в run-time из одной программы запустить другую(к примеру, объектик программы "Hello, world!!!") Привидите пример пожалуйста, если это не сложно |
| Автор: InvalidProperty 29.4.2009, 07:53 | ||||
это что? запустить объект программы? Запустить объектный файл, типа .o, .so на выполнение или запустить на выполнение команду из текущего процесса? Если последнее, то
для достижения пущего эффекта, этот пример в скомпилированном виде нужно запускать с правами рута. ссылка на маны http://www.opennet.ru/man.shtml?topic=exec&category=3&russian=5 так же можно получить по
|
| Автор: annushka89 29.4.2009, 09:15 |
| спасибо, я имела ввиду есть какие-нибудь способы, чтобы из одной программы запускать другую и как это программно реализовать??? |
| Автор: InvalidProperty 29.4.2009, 09:20 |
| annushka89, блин, а я что написал??? ты же уже написала что неплохо освоила С++, я не делал скидку на нубизм. ЗЫ еще раз перечитай то, что я запостил |
| Автор: annushka89 29.4.2009, 22:19 |
| спасибо |
| Автор: InvalidProperty 30.4.2009, 07:29 |
| annushka89, пожалуйста. Обращайся. Если вопрос закрыт - закрой тему. |
| Автор: azesmcar 30.4.2009, 13:14 | ||
а еслиб и вправду запустила? |
| Автор: InvalidProperty 30.4.2009, 13:33 | ||
azesmcar, как говорил хацкер Падла из Фальшивых Зеркалов Лукьяненко:
|
| Автор: azesmcar 30.4.2009, 13:38 |
| InvalidProperty Ну вот она бы и проверила, в первую очередь, под пользователем root |
| Автор: volkrey 27.5.2009, 09:14 |
| InvalidProperty, а че ты девушки подлянку то делаешь? человек с просьбой обратился, надеясь на помощь, доверяя вам, а вы ему ### в ответ |
| Автор: InvalidProperty 27.5.2009, 09:40 |
| volkrey, да ты вовремя пришел, дорогой. Ты в следующий раз подревнее тему поищи. Проблема не во мне и не в девушке, которая, кстати сказать, благодарной осталась, а в том, что некоторые люди юмора не понимают в силу своей возрастной категории или каких-либо тараканов в голове, таким людям очень сложно понимать других людей. |
| Автор: volkrey 27.5.2009, 10:33 |
| может быть,но все равно не по-человечески это |
| Автор: scriptkiddie 27.5.2009, 11:56 |
| почитал про эту функию exec.ужаснулся.вывод не верь ,не бойся ,не проси |
| Автор: Zerstroer 5.10.2009, 12:35 |
| Браво! |
| Автор: Zerstroer 5.10.2009, 13:07 | ||
| Возник вопрос в эту тему. Использую execl(). Задача - последовательный запуск двух процессов. (2 приложения в исполнаяемых файлах). Код:
После компилляции (В NetBeans все делаю) запускаю скомпиленое приложение с правами root из под консоли. Получаю сообщение "ошибка сегментирования". С чем связано? Неправильное использование функции? |
| Автор: vinick 5.10.2009, 14:05 | ||
Во-первых правильный вызов должен быть таким
Во-вторых, в случае успешного выполнения exec никогда не возвращает управление, так что второй вызов execl у вас будет сделан только если первый закончился неудачей. |
| Автор: svlary 6.10.2009, 06:02 | ||||
Смотрим man на ececl :
Теперь все понятно ? Т.е. первый элемент ДОЛЖЕН указывать на ИМЯ ФАЙЛА ! |
| Автор: Zerstroer 7.10.2009, 11:23 |
| Спасибо! Возник резонный вопрос: каким образом из одной программы можно запустить 2 и более приложений? |
| Автор: vinick 7.10.2009, 11:38 | ||
Через связку fork+exec. Порождаете потомка и в нем запускаете exec, потом в родительском процессе опять делаете fork и снова в потомке exec и т.д. |
| Автор: Zerstroer 7.10.2009, 12:01 | ||
| Благодарю! http://www.opennet.ru/man.shtml?topic=fork&category=2&russian=0 - мне в помощь! Добавлено через 14 минут и 5 секунд Проверьте пожалуйста синтаксис:
Таким образом используется? |
| Автор: Zerstroer 7.10.2009, 12:50 |
| Уже не надо. Нашел мануал. http://www.ibm.com/developerworks/ru/library/au-unixforks/index.html |
| Автор: Zerstroer 7.10.2009, 13:08 |
| И все же... |
| Автор: vinick 7.10.2009, 16:05 | ||
примерно так:
|
| Автор: Zerstroer 8.10.2009, 11:09 | ||
| Почему-то запускает только один процесс. Использовал код который привел vinick а так же свой вариант:
В моем случае запускается только proc1 (тот, что родительский). А требуется запуск 2х процессов. |
| Автор: Zerstroer 8.10.2009, 13:11 |
| Оба процесса в обоих случаях запускается. Как сделать так, что бы управление оставалось в программе? следить за pid и за ppid? |
| Автор: svlary 13.10.2009, 06:27 | ||
В КАКОЙ - программе ?! После завершения системного вызова execl "старой" программы уже в памяти нет! Ее сегмент кода замещен кодом из файла, который Вы указали в вызове execl. Поэтому, (на тот случай, если системный вызов не сработал) сразу после вызова нужно ставит строки : /* Возврат из вызова execl однозначно указывает на ошибку */ syslog(LOG_CRIT, "Error at execl(%s) %m", proc_name); exit(EXIT_FAILURE); |
| Автор: massiv 19.10.2009, 13:21 | ||||||
не совсем понятно, зачем вам следить за тем што происходит с процессми запущенными execl, после запуска оин начинаюит жить своей жизнью. Другое дело , если вы хотитите заставить родительский процесс делать ещё што то помимо создания 2-х дочерних процессов, наспимер дождаться завершения одного из дочерних порцессов. В таком случае што вам мешает это сделать? Пишите нужный ком в родительском и всё, like that:
|
| Автор: MAKCim 19.10.2009, 14:06 |
| massiv, ясно же написано: каждая функция из семейства функций exec* может возвращать ошибку |
| Автор: Zerstroer 11.11.2009, 13:30 |
| Спасибо всем, уважаемые, задача была выполена. Реализация найдена. |