- •Глава 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) {
Void winapi svc_ctrlhandler(dword ctl) {
If (Ctl - Service_control_st0p) {
status.dwCurrentState - SERVICE_STOPPED:
SetServiceStatus (sth. &status);
running = false;
}
}
Исключение службы
Для исключения службы из реестра используют функцию DeleteService(), куда необходимо передать дескриптор службы. Его нужно получить с помощью функции OpenService(), что как параметры принимает дескриптор менеджера служб и имя имеющейся службы:
SC_HANDLE mh – OpenSCManager(NULL. NULL. SC_MANAGER_ALL_ACCESS);
SC_HANDLE sh = OpenService(mh."mysvc",SERVICE_ALL_ACCESS);
Deleteservice(sh);
Closeservicehandle(sh);
Отметим, что если служба в момент исключения находилась в состоянии выполнения, ее лишь помечают для исключения. Фактическое исключение происходит во время следующей загрузки системы.
Выводы
-
Терминальное введение-выведение реализует взаимодействие с алфавитно-цифровыми устройствами. У современных ОС такие устройства чаще всего являются эмуляторами терминала, работу с которыми осуществляют по одним и тем же правилам. На основе терминального введения-выведения реализуют командный интерфейс пользователя ОС в виде командных интерпретаторов.
-
Есть разные подходы к организации графического интерфейса пользователя, самой распространенной из них является реализация такого интерфейса как интегрированной части системы, которая работает в режиме ядра (так сделано в системах линии Windows XP), и реализация средств его поддержки в режиме пользователя в виде набора библиотек и утилит (примером является система X Window).
-
Разработка фоновых применений, которые не взаимодействуют с пользователем, осуществляется по особенным правилам. В UNIX-системах для таких применений закрыта возможность интерактивного обмена данными с пользователем, в системах линии Windows XP есть специальный компонент, ответственный за управление ими.
Контрольные вопросы и задания
1. Приведите пример программного канала, один из элементов которого должен завершиться аварийно через получение сигнала SIGPIPE. Используйте синтаксис каналов командного интерпретатора.
2. Разработайте применение для Linux и Windows XP, которое:
а) создает потомка, переадресовывает свой стандартный вывод на стандартный ввод этого потомка, выводит сообщение на стандартный вывод и возобновляет предыдущее состояние вывода. Потомок должен отображать на стандартный вывод все данные, полученные на его стандартный ввод;
б) переадресовывает стандартный вывод и стандартный поток сообщений об ошибках в конец файла, имя которого задано в командной строке, после чего выводит сообщение на стандартный вывод и в стандартный поток уведомлений об ошибках;
в) создает двух потомков и переадресовывает стандартный вывод одного из них на стандартный ввод другого (связывая их безымянным каналом). Первый потомок должен выводить произвольное сообщение на стандартный вывод, второй, - отображать на стандартный вывод все данные, полученные на стандартный ввод;
г) хранит стандартный вывод потомка в строке символов и отображает содержание этой строки (так может быть реализована командная подстановка). Потомок должен выводить произвольное сообщение на стандартный вывод.
3. Модифицируйте применение задания 2, бы из раздела 17 так, чтобы стандартный поток сообщений об ошибках был направлен на сервер (заданный ІР-адресом и портом) с использованием сокетов. Разработайте сервер, который будет хранить полученную информацию в файле.
4. Модифицируйте командный интерпретатор для Linux и Windows XP, разработанный во время выполнения задания 10 из раздела 3 и задания 10 из раздела 14, дополнив его функцией переадресування введения-выведения, каналов и командной подстановки. Во время решения задачи пользуйтесь результатами выполнения задания 2 из раздела 17.
5. Сессия командного интерпретатора запущена для отдаленного телнет-клиента. Опишите, какие компоненты ОС на локальном и отдаленном хостах отвечают за отображение стандартного вывода применений, запущенных в этой сессии.
6. Перечислите общие черты и отличия оконной подсистемы Windows XP и системы X Window. Какие преимущества и недостатки имеет каждая из систем?
7. Сессия командного интерпретатора, запущенная на отдаленном хости, отображается в окне эмулятора терминала xterm. Опишите, какие компоненты ОС на локальном и отдаленном хостах отвечают за отображение стандартного вывода применений, запущенных в этой сессии.
8. В какой ситуации стандартный вывод Х-клиента автоматически отображается на текстовой консоли, из которой был запущен Х-сервер, а в которой - нет? Можно ли обеспечить отображение вывода Х-клиента на заданную текстовую виртуальную консоль?
9. Разработайте фоновое применение для Linux и Windows XP, что отслеживает все изменения файлов в заданном каталоге (создание, исключение, изменение размера и тому подобное). Имя каталога может быть задано в командной строке, для Windows XP допустимое его задання в системном реестре. Каждое изменение регистрируют в файле в формате "время: имъя_файлу характер_змини".
10. Модифицируйте сервер, полученный для задания 11 из раздела 16, реализовав его как фоновый процесс для Linux и Windows XP.
