Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр. в граф. ОС.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
168 Кб
Скачать
☆

Лабораторная работа №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-ом) ?