
- •Глава 8
- •В.Г.Олифер, н.А.Олифер. Сетевые операционные системы. Учебное пособие.-сПб.:бхв-Петербург, 2006.-536с.
- •В.А.Шеховцов. Операційні системи. Підручник .-к.:Виканавча група внv. 2005. 576с.
- •Столлингс в. Операционные системы. М.: Вильямс, 2001. -672с.
- •Раздел 8 Взаимодействие с пользователем в операционных системах
- •8.1. Терминальный ввод-вывод
- •8.1.1. Организация терминального ввода-вывода
- •8.1.2. Терминальное ввод-вывод в unix и Linux
- •8.1.3. Терминальный ввод-вывод в Win32 арi
- •8.2. Командный интерфейс пользователя
- •8.2.1. Принципы работы командного интерпретатора
- •8.2.2. Перераспределение потоков ввода-вывода
- •8.3. Графический интерфейс пользователя
- •8.3.1. Интерфейс оконной и графической подсистемы Windows хр
- •Int winapi Winmain hinstance ih. Hinstance tp.
- •Int X. Int y. Int width, int height. Hwnd ph. Hmenu mh.
- •8.3.2. Система X Window
- •17.4. Процессы без взаимодействия с пользователем
- •17.4.1. Фоновые процессы на основе posix
- •17.4.2. Службы Windows xp
- •Void maino {
- •Void winapi svc_main(dword argc. Lptstr argv[]){
- •Void winapi svc_ctrlhandler(dword ctl) {
- •If (Ctl - Service_control_st0p) {
8.1.3. Терминальный ввод-вывод в Win32 арi
Основным для терминального введения-выведения у Win32 есть понятие консоли. Оно отличается от определенного раньше; фактически консоль - это предоставленный ОС специальный эмулятор терминала.
Обычно консоль связывают с конкретным процессом. Для процессов, которые запускают ОС, консоли связывают с консольными процессами, точкой входа для которых является функция main(). Во время вызова CreateProcess() выделение отдельной консоли для процесса задается включением флажка создания Create_NEW_CONSOLE. Кроме того, несколько процессов могут совместно использовать одну и ту же консоль (например, после вызова CreateProcess() новый процесс по умолчанию наследует консоль предка).
Логическая структура консоли аналогична приведенной на рис. 8.1, за исключением того, что с ней может быть связано несколько буферов вывода. Можно выводить данные в разные буферы, а затем переключаться между ними.
Для работы с консолью есть два наборы функций.
Функции высокого уровня дают возможность работать со стандартными вводом и выводом и определять некоторые режимы управления, консолью.
Функции низкого уровня дают возможность процессам получать полную информацию об интерактивной работе пользователя с клавиатурой и мышью. В большинстве случаев процессу достаточно функций высокого уровня; примером программы, разработанной с использованием функций низкого уровня, является файловый менеджер far.
Заранее определеныe дескрипторы в Win32
Заранее определены дескрипторы в Win32 связанные с консолью. Отличие от POSIX заключается в том, что такие дескрипторы не отвечают конкретным целым числам, а всегда является результатом вызова функции GetStdHandle().
8.2. Командный интерфейс пользователя
8.2.1. Принципы работы командного интерпретатора
Основным заданием командного интерпретатора является поддержка интерактивной работы пользователя, который взаимодействует с системой через терминал.
В UNIX-системах командный интерпретатор называют оболочкой (shell). Разработаны много версий интерпретаторов, среди них sh (исходный вариант), csh (С-shell) и bash.
Интерпретатор bash входит в стандартную поставку большинства дистрибутивов Linux. Системы линии Windows ХР включают специализированный интерпретатор cmd, который используют во время работы в режиме консоли.
Работа интерпретатора будет рассмотрена на примере bash.
Командный интерпретатор запускают каждый раз, когда пользователь регистрируется в системе из терминала, при этом стандартным входным и исходным устройством для интерпретатора и запущенных с его помощью программ является этот терминал. Во время запуска считывают конфигурационные файлы и выполняют определенные в них действия для подготовки среды этого пользователя.
Во время работы интерпретатор ожидает ввода данных пользователя, отображая подсказку (например, знак доллара). По получении данных пользователя (каторые формируют командную строку) он интерпретирует их и выполняет некоторые действия. Чаще всего они сводятся к выполнению программы, для чего интерпретатор создает процесс, загружает у него программный код и ожидает его завершение (в соответствии с технологией fork+eхес).
Приведем пример. $ cat myfile.tхt.
содержание файла myfile.tхt.
$ ... ожидание ввода
В результате выполнения этой командной строки будет создан новый процесс, куда будет загружен код утилиты cat, параметром которой является имя файла. Утилита считывает этот файл и отображает его на стандартный вывод. После завершения выполнения утилиты интерпретатор подает подсказку и ожидает введение следующей командной строки.
Процесс может быть запущен асинхронный, для чего в конце командной строки нужно задать символ &. После этого подсказка выдается немедленно, а процесс продолжает свое выполнение в фоновом режиме.
Наборы команд интерпретатора могут сохраняться в командных файлах (такие интерпретаторы, как bash, дают возможность использовать в них достаточно мощный язык программирования). Этот командный файл может быть выполнен по тем же правилам, что и любой файл скрипта.