> 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);
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://vala.gitbook.io/vala/techniques/using-glib.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
