Нужно из исполняемого файла запустить другой исполняемый файл который находится в предыдущих директориях.
Как это сделать?
C/C++
Linux перекрëстное исполнение
Исполняемый файл из плюсов запускается вызовом system() (на худой конец, есть и другие способы).
Относительные пути наверх - подъем на один уровень вверх по дереву осуществляется добавлением к пути "..".
Т.е. system("../mybin") должен выполнить файл mybin, находящийся на один уровень выше рабочего каталога. Обратите внимание, что рабочий каталог может оказаться в произвольном месте системы, далеко не там, где находится запускаемый бинарник. Путь к бинарнику получают, например, вызовом readlink через ссылку proc/self
Относительные пути наверх - подъем на один уровень вверх по дереву осуществляется добавлением к пути "..".
Т.е. system("../mybin") должен выполнить файл mybin, находящийся на один уровень выше рабочего каталога. Обратите внимание, что рабочий каталог может оказаться в произвольном месте системы, далеко не там, где находится запускаемый бинарник. Путь к бинарнику получают, например, вызовом readlink через ссылку proc/self
readlink("/proc/self/mybin", path, PATH_MAX);
A053Amp Aa
На худой конец????? Ндаааа......
прямой путь указать - не судьба?
Дима Смирнов
Исполняемые файлы, размещённые в директории пользователя могут находится в произвольных положениях и прямой путь к ним может быть неизвестен
У вас в одном вопросе фактически два вопроса. Причем один из них очень криво сформулирован. Что такое "предыдущие директории"? Если имеется ввиду путь выше к корню, то, как верно было указано выше, можно воспользоваться двумя точками для указания вышестоящего каталога. ОДНАКО, если слово безопасность не является для вас пустым звуком, лучше всегда использовать абсолютные пути для запуска каких-либо программ. Это не значит, что данный путь нужно жестко прописывать в коде, корень этого пути можно получать из конфигурационного файла или из параметров командной строки и потом, на его основе, формировать полный путь к исполняемому файлу.
Теперь по самому запуску. Фактически запуск программы на выполнение происходит при помощи функции execve (либо надстройки над ней из семейства exec). При этом текущий образ процесса полностью замещается новым, однако многие ресурсы (например открытые файловые дескрипторы, если не было принято специальных мер) наследуются новым процессом. Поэтому, если нужно чтобы текущая программа существовала параллельно с запущенной, вызову exec предшествует вызов fork, создающей полную копию текущего процесса. Родительский процесс может отслеживать статус процесса-потомка при помощи функций типа wait или waitpid. Вышеупомянутая функция system - это высокоуровневая надстройка, которая делает эти вещи внутри себя. Причем system выполняет программу путем запуска оболочки (shell). С одной стороны, это дает возможность выполнять всякие скрипты, но, с другой стороны, на все эти телодвижения тратятся лишние ресурсы и время. На мой взгляд system - это одна из самых бестолковых функций, потому что обычно требуется какое-то взаимодействие с запущенным процессом, а при помощи system вы можете разве что узнать код завершения запущенной программы.
Теперь по самому запуску. Фактически запуск программы на выполнение происходит при помощи функции execve (либо надстройки над ней из семейства exec). При этом текущий образ процесса полностью замещается новым, однако многие ресурсы (например открытые файловые дескрипторы, если не было принято специальных мер) наследуются новым процессом. Поэтому, если нужно чтобы текущая программа существовала параллельно с запущенной, вызову exec предшествует вызов fork, создающей полную копию текущего процесса. Родительский процесс может отслеживать статус процесса-потомка при помощи функций типа wait или waitpid. Вышеупомянутая функция system - это высокоуровневая надстройка, которая делает эти вещи внутри себя. Причем system выполняет программу путем запуска оболочки (shell). С одной стороны, это дает возможность выполнять всякие скрипты, но, с другой стороны, на все эти телодвижения тратятся лишние ресурсы и время. На мой взгляд system - это одна из самых бестолковых функций, потому что обычно требуется какое-то взаимодействие с запущенным процессом, а при помощи system вы можете разве что узнать код завершения запущенной программы.
Похожие вопросы
- Как увидеть qt c++ и не испугаться разработки в linux?
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Зачем нужен linux, если в windows можно поставить подсистему linux?
- Linux защита билдов нарушу ли я право лицензии если буду вшивать в свои бинарные фаилы самоуничтожение после не оплаты?
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- 28 причин почему Linux не имеет будущего !!!пояснения читайте !!!почему перешли то ?
- Почему Linux так малопопулярен?
- Зачем нужен Linux?
- Что выбрать Windows 8 или Linux?
- Почему LINUX лучше Windows? Ответ внутри!