- •Программирование в графических операционных системах Методические указания к лабораторным работам
- •Лабораторная работа №1
- •Предварительные сведения
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Библиографический список
Лабораторная работа №2
Содержание работы. Ознакомление со строением программы графического приложения в X System.
Предварительные сведения
В операционной системе Linux запуск графической системы производится как запуск командного файла startx. Если сама операционная система конфигурирована на исходный текстовый интерфейс, то этот запуск осуществляется явно пользователем с одной из текстовых консолей после его входа в систему после авторизации и, возможно, ввода пароля. После этого на отдельной виртуальной консоли поддерживается графическое изображение экрана, отображающее все графические требования клиентов и воздействия устройств ввода, в первую очередь воздействия клавиатуры и мыши. Основой графической системы здесь является специальная программа, называемая X сервером. Переключение между графическим экраном X-сервера и текстовыми экранами консолей задается нажатием комбинаций клавиш Alt-Ctl-Fx, где x — номер текстовой консоли. Обратное переключение достигается нажатием пары клавиш Alt-F7.
Взаимодействие программ с X Window System осуществляется на основе API, базовая часть которого описана в специальном заголовочном файле с именем Xlib.h. В ОС Linux этот файл находится в каталоге /usr/include/X11.
Первое, что должна выполнить программа пользователя X Window System, т. е. программа клиента, — запросить соединение с X-сервером. Для этого служит функция с прототипом
Display* XOpenDisplay(char *display).
В качестве аргумента эта функция в простейших случаях использует указатель NULL, который задает использование X-сервера по умолчанию, описанному в стартовых файлах конкретного пользователя. Функция XOpenDisplay открытия доступа к X серверу при удачном выполнении возвращает указатель на структуру описания дисплея, имеющую тип данных Display. В дальнейшем практически все действия с графической системой X Window System требуют задания этого указателя — как одного из параметров вызова функции действия. При невозможности открытия связи с сервером функция XOpenDisplay возвращает нулевое значение, поэтому значение, возвращаемое данной функцией, следует обязательно проверять на равенство нулю.
Подробные сведения о материале лабораторной работы следует искать в пособиях [1,2].
Задание. Разработать в системе X программу простейшего графического приложения, которая обрабатывает сообщения KeyPress и ButtonPress с выдачей сообщения о нажатии клавиши стандартной функцией текстового вывода.
Провести программные эксперименты:
как изменится функционирование программы, если из нее исключить задание маски KeyPressMask в функции XSelectInput;
как изменится функционирование программы, если из нее исключить задание маски ButtonPressMask в функции XSelectInput;
В основном окне должны быть созданы два дополнительных окна, которые являются дочерними – в смысле графической принадлежности. Одно из этих окон обслуживается тем же процессом, что и главный процесс графического приложения, а другое окно должно обслуживаться дочерним процессом, создаваемым в программе через системный вызов fork(). Каждый процесс выдает сообщения о нажатии кнопки мыши своим текстом с помощью функции XDrawString при щелчке мышью внутри своего дополнительного окна.
Результаты объяснить.
Контрольные вопросы
1. В чем принципиальные отличия функционирования графических приложений в системе X Window System от функционирования графических приложений в системе MS Windows?
2. Чем построение программы для системы X Window System существенно отличается от построения программы для системы MS Windows?
3. С чем графический сервер системы X взаимодействует в клиентском приложении: графическим окном, системой окон, программным процессом или с программной нитью (thread-ом) ?
