> For the complete documentation index, see [llms.txt](https://vala.gitbook.io/vala/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vala.gitbook.io/vala/techniques/using-glib.md).

# Использование GLib

#### **немного wiki**

**GLib** — низкоуровневая [библиотека](https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_\(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\)), расширяющая возможности, предоставляемые стандартной библиотекой [libc](https://ru.wikipedia.org/wiki/Libc) языка C.

GLib предоставляет следующие возможности:

* большой набор базовых и производных [типов](https://ru.wikipedia.org/wiki/%D0%A2%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) данных;
* [макросы](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81) и развитый механизм [отладочных](https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B) сообщений;
* [строковые](https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF) функции;
* функции для преобразования кодировок и поддержки юникода;
* встроенные макросы gettext для интернационализации;
* средства для работы с [динамической памятью](https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D0%BC%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C);
* средства для динамической загрузки модулей;
* атомарные операции;
* программные [потоки](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_\(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0\)) и средства их синхронизации;
* порождение новых процессов;
* таймеры, функции для работы с датой и временем;
* генератор псевдо-случайных чисел;
* универсальный лексический сканер;
* синтаксический анализатор параметров командной строки;
* синтаксический анализатор подмножества данных типа XML;
* синтаксический анализатор .ini-подобных конфигурационных файлов;
* средства ввода-вывода;
* [функции перехвата](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%B2%D0%B0%D1%82_\(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\));
* Shell-related Utilities;
* синтаксический анализатор файлов, содержащих закладки;
* средства работы с регулярными выражениями типа Glob.

#### от меня

Так как GLib является базовой(Core)  библиотекой Vala то все её возможности уже реализованы в синтаксисе языка(например ключевое слово `async` за кулисами создает [GTask](https://developer.gnome.org/gio//2.56/GTask.html)) однако если вам понадобилось использовать какие либо не задокументированные на valadoc вещи, то это гайд как это сделать руководствуясь только манами GLib (которые написаны на си)

#### Сам гайд&#x20;

GLib включает множество утилит, в том числе оболочки для большинства стандартных функций libc и множество другое. Эти инструменты доступны на всех платформах Vala, даже если они не совместимы с POSIX. За полным описанием GLib обратитесь к [GLib Reference Manual](https://app.gitbook.com/@gavr123456789/s/glib/)(Перевод которого у меня тоже имеется). Этот справочник написан по С интерфейсу, но можно легко понять, как его использовать для Vala.

При использовании функций GLib в Vala действуют следующие соглашения об именах:

| C API | Vala | Example |
| ----- | ---- | ------- |

| g\_topic\_foobar() | GLib.Topic.foobar() | GLib.Path.get\_basename() |
| ------------------ | ------------------- | ------------------------- |

Типы GLib можно использовать сходным образом:

| Создать экземпляр с            | Вызвать член объекта с |
| ------------------------------ | ---------------------- |
| GLib.Foo foo = new GLib.Foo(); | foo.bar();             |

## Работа с файлами

За примерами гибкого файлового ввода-вывода и работы с файлами обратитесь в Vala/GIOSamples.

Вы можете так же воспользоваться FileUtils.get\_contents, чтобы загрузить файл в строку.

```csharp
string content;
FileUtils.get_contents("file.vala", out content);
```
