[ Назад ] [ Содержание ] [ Далее ]

Самая простая программа

     Итак, для начала нам необходимы следующие вещи: какая-нибудь, похожая на Unix система, работающий и доступный X-сервер, компилятор языка C++, библиотека Xlib. Это самые необходимые компоненты для написания программы. Собственно говоря, C++ на первых порах будет вовсе не обязателен, но в дальнейшем, для написания программ со сложными графическими интерфейсами, лучше прибегнуть к приемам объектно-ориентированного программирования.

     Напишем самое простое приложение. Просто подключимся к графическому терминалу, узнаем о нем кое-какие сведения и отключимся. Для этого нам потребуются две функции: XOpenDisplay, XCloseDisplay, а также структура данных Display.

Пример ex000.c:
#include <stdio.h>
#include <X11/Xlib.h>

int main()
 {
  Display *ourDisplay;
  
  ourDisplay=XOpenDisplay(NULL);
  if (ourDisplay==NULL)
    {
      printf("Не удалось установить соединение с графическим терминалом.\n");
      return 1;
    };

  /* Выводим сведения о графическом терминале */
  printf("Установлено соединение с графическим терминалом.\n");
  printf(" Номер соединения: %d;\n",ConnectionNumber(ourDisplay));
  printf(" Используется протокол версии %d.%d;\n",
           ProtocolVersion(ourDisplay),ProtocolRevision(ourDisplay));
  printf(" Разработчик сервера: %s;\n",ServerVendor(ourDisplay));
  printf(" Версия сервера: %d\n",VendorRelease(ourDisplay));
  printf(" Строка соединения: [%s];\n",DisplayString(ourDisplay));
  printf(" Количество экранов на сервере: %d;\n",ScreenCount(ourDisplay));
  printf(" Номер экрана по-умолчанию: %d;\n",DefaultScreen(ourDisplay));

  XCloseDisplay(ourDisplay);
  return 0;
 };

     Для GNU/Linux, распространяемого компанией Red Hat, команду компиляции можно написать следующим образом:

     В различных реализациях Unix-систем эта команда может выглядеть иначе, но в общем случае идея команды такова:

     Если при компиляции возникают ошибки, то вероятнее всего или у Вас нет библиотеки Xlib, или сама библиотека находятся в другом месте, или файлы заголовков находятся в каталоге вне дерева стандартного подключения заголовков. Также, возможно, что вы перепутали компилятор и решили скомпилировать программу компилятором паскаля.

     Наиболее принятая конфигурация каталогов такова:

     Поскольку фирмы, занимающиеся компоновкой юникс систем не выработали общих правил формирования дерева каталогов, часто возникают проблемы при компиляции программ. К примеру, системы использующие сервер XFree86 обычно используют каталог /usr/X11R6 как каталог системы X-Window, а коммерческие юниксы используют каталог /usr/X11. Также есть экзотический вариант расположения в каталоге /opt/X/bin/X11. Самый простой выход для пользователя в этом случае сделать линки с альтернативными названием каталога, чтобы не копаться в скриптах или пакетных файлах компиляции. Впрочем, уже много программных продуктов, выпущенных в последнее время на этапе подготовки к компиляции настраиваются на ту иерархию каталогов, которая существует на машине пользователя. Последнее ложится на плечи разработчиков программного обеспечения. Поскольку мы хотим к ним относиться, то придётся в одной из глав уделить этому внимание.

     Итак, предположим программа удачно скомпилировалась. Если она удачно запустилась и выдала всю необходимую информацию, то значит у нас все правильно настроено. Если не запустилась, необходимо разобраться в чём дело.

     Во-первых, для запуска программы нам необходимо иметь доступ к работающему X-серверу. Если доступ к серверу отсутствует (Xlib сообщит об этом), то на нем необходимо открыть доступ. Самый простой способ - через команду xhost:

coral:~> xhost host.domain

где host.domain - адрес машины, на которой запускается приложение.

     Во-вторых у нас должна быть на него ссылка. Она хранится в переменной окружения DISPLAY. Формат ссылки таков: <host name>:<screen number>. По-идее эта переменная должна устанавливается автоматически, но вполне может быть, что этого не будет происходить. Вручную эта переменная устанавливается следующим образом:

coral:~> export DISPLAY=myhost.mydomain:0
или просто
coral:~> DISPLAY=myhost.mydomain:0

     где myhost.mydomain - адрес машины, на которой запущен X-сервер, а coral в нашем случае это машина, на которой будет работать приложение.


[ Назад ] [ Содержание ] [ Далее ]