10.5.1. Запуск и ожидание с помощью system()
10.5.1. Запуск и ожидание с помощью system()
Программам часто требуется запускать другие программы и ожидать их завершения, прежде чем продолжать свою работу. Функция system() позволяет это делать достаточно просто.
int system (const char* cmd);
system() порождает дочерний процесс, который выполняет exec() для /bin/sh, который, в свою очередь, запускает cmd. Исходный процесс ожидает завершения дочерней оболочки и возвращает тот же код, что wait()[28]. Если вам не нужно оставлять в памяти оболочку (что случается редко), cmd должна включать предшествующее слово "exec", которое заставляет оболочку вызывать exec() вместо запуска cmd как подпроцесса.
Поскольку cmd запускается из оболочки /bin/sh, то здесь применимы все обычные правила расширения команд. Ниже показан пример вызова system(), который отображает исходные тексты С из текущего каталога.
#include <stdlib.h>
#include <sys/wait.h>
int main() {
int result;
result = system("exec ls *.c");
if (!WIFEXITED(result))
printf("(аварийный выход) ");
exit(0);
}
Команда system() должна применяться с большой осторожностью в программах, которые запускаются со специальными полномочиями. Поскольку системная оболочка предоставляет множество мощных средств и сильно зависит от переменных окружения, system() является уязвимым местом в плане безопасности, которым могут воспользоваться злоумышленники для проникновения в систему. Однако до тех пор, пока приложение не является демоном или программой setuid/setgid, вызов system() совершенно безопасен.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Запуск сценария с помощью меню Пуск
Запуск сценария с помощью меню Пуск Для запуска сценария с помощью пункта Выполнить (Run) меню Пуск (Start), достаточно написать полное имя этого сценария в поле Открыть (Open) (рис. 1.5). Рис. 1.5. Запуск сценария из меню Пуск в Windows ХРВ этом случае по умолчанию сценарий будет
Запуск сценария с помощью Проводника Windows (Windows Explorer)
Запуск сценария с помощью Проводника Windows (Windows Explorer) Самым простым является запуск сценария в окнах Проводника Windows или на рабочем столе — достаточно просто выполнить двойной щелчок мышью на имени файла со сценарием или на его значке (рис. 1.6). Рис. 1.6. Запуск сценария с
Запуск с помощью оболочки Windows
Запуск с помощью оболочки Windows Для доступа к стандартным диалоговым окнам Windows и модулям панели управления нужно сначала создать экземпляр объекта-оболочки Windows://Создаем объект Shell.ApplicationShell=WScript.CreateObject("Shell.Application");Модули панели управления вызываются с помощью метода
Запуск с помощью системных функций Windows
Запуск с помощью системных функций Windows Другим вариантом запуска модулей панели управления является использование специальных функций, находящихся в библиотечном файле shell32.dll. Хотя из сценариев нельзя напрямую вызывать системные функции Windows, для этой цели можно
21.5. Запуск игр с помощью эмулятора wine
21.5. Запуск игр с помощью эмулятора wine Эмулятор wine гарантированно поддерживает следующие игры:1. Counter Strike2. StarCraft3. Fallout4. Fallout 25. Gunman6. Quake 27. Quake 38. Soldier of Fortune9. Unreal Tournament10. Red Alert (все версии)11. Diablo 212. Caesar13. Return to Castle Wolfenstain14. Star track15. Kingpin16. Nox17. Jadded Alliance18. 4?4 Evolution19. American McGee
2.1.2. Настройка модемного соединения с помощью конфигуратора system-config-network
2.1.2. Настройка модемного соединения с помощью конфигуратора system-config-network Все сетевые соединении в Fedora настраиваются с помощью конфигуратора system-сonfig-network. Но именно для модемного соединения его использовать неудобно - нельзя указать несколько телефонов дозвона, особую
System.DateTime и System.TimeSpan
System.DateTime и System.TimeSpan В завершение нашего обзора базовых типов данных позволите обратить ваше внимание на то, что пространство имен System определяет несколько полезных типов данных, для которых в C# не предусмотрено ключевых слов. Это, в частности, типы DateTime и TimeSpan (задачу
Базовые классы System.MulticastDelegate и System.Delegate
Базовые классы System.MulticastDelegate и System.Delegate Таким образом, при создании типов c помощью) ключевого слова delegate в C# вы неявно объявляете тип класса, являющегося производным от System.MulticastDelegate. Этот класс обеспечивает своим потомкам доступ к списку с адресами тех методов, которые
Получение Туре с помощью System.Object.GetType()
Получение Туре с помощью System.Object.GetType() Экземпляр класса Туре можно получить множеством способов. Нельзя только непосредственно создать объект Туре, используя для этого ключевое слово new, поскольку класс Туре является абстрактным. Чтобы привести пример одной из
Получение Туре с помощью System.Type.GetType()
Получение Туре с помощью System.Type.GetType() Более гибкий подход обеспечивается использованием статического члена GetType() класса System.Type с указанием абсолютного имени соответствующего типа в виде строки. При использовании такого подхода для извлечения метаданных уже не
Синхронизация с помощью типа System.Threading.Monitor
Синхронизация с помощью типа System.Threading.Monitor Оператор C# lock на самом деле является лишь ключевым словом, обозначающим использование типа класса System.Threading.Monitor. После обработки компилятором C# контекст блокировки превращается в следующее (вы можете убедиться в этом с помощью
Синхронизация с помощью типа System.Threading.Interlocked
Синхронизация с помощью типа System.Threading.Interlocked В это всегда верится с трудом, пока вы не проверите соответствующий программный код CIL, но и операции присваивания, и базовые арифметические операции не являются атомарными. Поэтому в пространстве имен System.Threading предлагается
ГЛАВА 19. Создание окон с помощью System.Windows.Forms
ГЛАВА 19. Создание окон с помощью System.Windows.Forms Если вы прочитали предыдущие 18 глав, вы должны иметь солидную базу дли использования языка программирования C# и архитектуры .NET. Вы, конечно же, можете применить полученные знания для построения консольных приложений следующего
3.2.1. Запуск команд и сценариев с помощью команды at
3.2.1. Запуск команд и сценариев с помощью команды at Текст задания можно передать команде at двумя способами: в файле или в режиме командной строки at. Если задание состоит из одной команды или двух — трех команд, объединенных каналом, то удобнее воспользоваться вторым