GIO (Gnome Input/Output)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:55, 20 января 2018.
GIO (Gnome Input / Output)
Разработчики: The GNOME Project
Выпущена: 29 February 2009 года; 11 years ago (2009-02-29)
Постоянный выпуск: 2.54.2 [Источник 1]
Состояние разработки: Active
Написана на: С
Тип ПО: System library
Лицензия: GNU Lesser General Public License
Веб-сайт developer.gnome.org/gio/stable

GIO (Gnome Input / Output) - это библиотека, предназначенная для представления программистам современного и удобного интерфейса к виртуальной файловой системе. Он позволяет приложениям получать доступ к локальным и удаленным файлам с помощью единого согласованного API, который был разработан для «преодоления недостатков GnomeVFS» и «настолько хорош, что разработчики предпочитают его поверх необработанных вызовов POSIX».[Источник 2]

GIO выступает в качестве низкоуровневой системной библиотеки для программного пакета GNOME Shell / GNOME / GTK + и разрабатывается проектом GNOME. Он поддерживается как отдельная библиотека libgio-2.0, но в комплекте с GLib. GIO - бесплатное программное обеспечение с открытым исходным кодом, соответствующее требованиям лицензии GNU Lesser General Public License.

В качестве примера можно привести Gigolo которая представляет собой графический интерфейс (фронтенд) для подключения к (S)FTP серверам. Программа использует визуальную файловую систему GVfs (GNOME Virtual file system), которая в свою очередь использует библиотеку GIO (Gnome Input/Output).

Особенности

Поскольку библиотека GNU C служит оболочкой для системных вызовов ядра Linux, библиотеки библиотек, включенные в GLib (GObject, Glib, GModule, GThread и GIO), служат в качестве дополнительных оболочек для их конкретных задач.
  • Модель абстрактной файловой системы GIO состоит из нескольких интерфейсов и базовых классов для ввода-вывода и файлов.
  • Существует несколько классов потоков, аналогичных иерархиям ввода и вывода, которые можно найти в таких фреймворках, как Java.
  • Существуют интерфейсы, связанные с приложениями и типами файлов, которые они обрабатывают.
  • Существует инфраструктура для хранения и извлечения настроек приложения.
  • обнаружение типа файла с помощью xdgmime (xdg = X Desktop Group = freedesktop.org)[Источник 3]
  • мониторинг файлов с помощью inotify [Источник 4]
  • мониторинг файлов с помощью FAM [Источник 5]
  • Существует поддержка сетевого программирования, включая разрешение имен, низкоуровневые API-интерфейсы сокетов и высокоуровневые классы-помощники и серверы.
  • Существует поддержка подключения к D-Bus, отправки и получения сообщений, владения и просмотра имен шин и создания объектов на шине.

Помимо этого, GIO предоставляет средства для мониторинга файлов, асинхронного ввода-вывода и завершения имени файла. Помимо интерфейсов, GIO обеспечивает реализацию локального случая. Реализации для различных сетевых файловых систем предоставляются пакетом GVfs в качестве загружаемых модулей.

Технические детали

GIO стремится предоставить современный, простой в использовании VFS API, который находится на правильном уровне в стеке библиотеки, а также другие общедоступные API для настольных приложений (например, поддержка сетей и D-Bus). Цель состоит в том, чтобы преодолеть недостатки GnomeVFS и предоставить API, который настолько хорош, что разработчики предпочитают его по необработанным вызовам POSIX. Среди прочего это означает использование GObject. Это также означает не клонирование POSIX API, а предоставление более высокоуровневых, ориентированных на документ интерфейсов.

Модель абстрактной файловой системы GIO состоит из нескольких интерфейсов и базовых классов для ввода-вывода и файлов:

  • GFile - ссылка на файл
  • GFileInfo - информация о файле или файловой системе
  • GFileEnumerator - список файлов в каталогах
  • GDrive - представляет собой привод
  • GVOLUME - представляет собой файловую систему абстрактным способом
  • GMount - представляет собой смонтированную файловую систему

Затем существует ряд классов потоков, аналогичных иерархиям ввода и вывода, которые можно найти в таких фреймворках, как Java:

  • GInputStream - читать данные
  • GOutputStream - записывать данные
  • GIOStream - чтение и запись данных
  • GSeekable - интерфейс, опционально реализованный потоками для поддержки поиска

Затем существует ряд классов потоков, аналогичных иерархиям ввода и вывода, которые можно найти в таких фреймворках, как Java:

  • GInputStream - читать данные
  • GOutputStream - записывать данные
  • GIOStream - чтение и запись данных
  • GSeekable - интерфейс, опционально реализованный потоками для поддержки поиска

Существуют интерфейсы, относящиеся к приложениям и типам файлов, которые они обрабатывают:

  • GAppInfo - информация о установленном приложении
  • GIcon - абстрактный тип для значков файлов и приложений

Существует инфраструктура для хранения и получения настроек приложения:

  • GSettings - сохраняет и извлекает настройки приложения

Существует поддержка сетевого программирования, включая мониторинг подключения, разрешение имен, API уровня lowlevel и высокоуровневые клиентские и серверные вспомогательные классы:

  • GSocket - низкоуровневый платформенный независимый объект сокета
  • GResolver - асинхронный и отменяемый DNS-преобразователь
  • GSocketClient - высокоуровневый клиент сетевого клиента
  • GSocketService - помощник высокоуровневого сетевого сервера
  • GSocketConnection - поток сетевого подключения
  • GNetworkMonitor - мониторинг сетевых подключений

Существует поддержка подключения к D-Bus, отправки и получения сообщений, владения и просмотра имен шин и создания объектов на шине:

  • GDBusConnection - соединение D-Bus
  • GDBusMethodInvocation - для обработки удаленных вызовов
  • GDBusServer - помощник для приема соединений
  • GDBusProxy - прокси для доступа к интерфейсам D-Bus на удаленном объекте

Помимо этого, GIO предоставляет средства для мониторинга файлов, асинхронного ввода-вывода и завершения имени файла. Помимо интерфейсов, GIO обеспечивает реализацию локального случая. Реализации для различных сетевых файловых систем предоставляются пакетом GVFS в качестве загружаемых модулей.

Другие варианты дизайна, которые сознательно ломаются с дизайном GnomeVFS, - это перемещение бэкэндов из процесса, что сводит к минимуму зависание зависимостей и делает всю систему более надежной. Бэкэнд не входит в состав GIO, но в отдельном пакете GVFS. Пакет GVFS также содержит демон GVFS, в котором появляются новые демоны монтирования для каждого отдельного соединения.

GIO в GTK+ стек библиотека

Источники

  1. GLib Reference Manual // Developer Gnome. [2017-2017]. Дата обновления: 30.10.2017. URL: https://developer.gnome.org/glib/ (дата обращения 18.12.2017).
  2. GIO 2.54.2 // Developer Gnome. [2017-2017]. Дата обновления: 30.10.2017. URL: https://developer.gnome.org/gio/stable/ (дата обращения 18.12.2017).
  3. root/gio/xdgmime // Developer Gnome. [2017-2017]. Дата обновления: 30.10.2017. URL: https://git.gnome.org/browse/glib/tree/gio/xdgmime (дата обращения 18.12.2017).
  4. root/gio/inotify // Developer Gnome. [2017-2017]. Дата обновления: 30.10.2017. URL: https://git.gnome.org/browse/glib/tree/gio/inotify (дата обращения 18.12.2017).
  5. root/gio/fam // Developer Gnome. [2017-2017]. Дата обновления: 30.10.2017. URL: https://git.gnome.org/browse/glib/tree/gio/fam (дата обращения 18.12.2017).