Инициализация библиотеки SQLite
int sqlite3_initialize(void); int sqlite3_shutdown(void); int sqlite3_os_init(void); int sqlite3_os_end(void);
Процедура sqlite3_initialize() инициализирует библиотеку SQLite. Процедура sqlite3_shutdown() освобождает ресурсы, выделенные функцией sqlite3_initialize(). Эти функции предназначены для поддержки инициализации и завершения процессов на встраиваемых системах. Приложения, использующие SQLite на рабочих станциях, обычно не нуждаются в вызове этих процедур.
Вызов sqlite3_initialize() считается «эффективным», если это первый вызов sqlite3_initialize() в течение жизненного цикла процесса или если это первый вызов sqlite3_initialize() после вызова sqlite3_shutdown(). Только эффективный вызов sqlite3_initialize() выполняет инициализацию. Все остальные вызовы — это безопасные пустые операции.
Вызов sqlite3_shutdown() считается «эффективным», если это первый вызов sqlite3_shutdown() после последнего sqlite3_initialize(). Только эффективный вызов sqlite3_shutdown() выполняет завершение. Все остальные допустимые вызовы sqlite3_shutdown() — это безопасные пустые операции.
Интерфейс sqlite3_initialize() потокобезопасен, но sqlite3_shutdown() — нет. Интерфейс sqlite3_shutdown() должен вызываться только из одного потока. Все открытые соединения с базой данных должны быть закрыты, а все остальные ресурсы SQLite должны быть освобождены до вызова sqlite3_shutdown().
Среди прочего, sqlite3_initialize() вызовет sqlite3_os_init(). Аналогично, sqlite3_shutdown() вызовет sqlite3_os_end().
Процедура sqlite3_initialize() возвращает SQLITE_OK при успехе. Если по какой-либо причине sqlite3_initialize() не может инициализировать библиотеку (например, не может выделить необходимый ресурс, такой как мьютекс), она возвращает код ошибки, отличный от SQLITE_OK.
Процедура sqlite3_initialize() вызывается внутри многих других интерфейсов SQLite, поэтому обычно приложение не должно вызывать sqlite3_initialize() напрямую. Например, sqlite3_open() вызывает sqlite3_initialize(), поэтому библиотека SQLite будет автоматически инициализирована при вызове sqlite3_open(), если она ещё не была инициализирована. Однако, если SQLite скомпилирован с опцией компиляции SQLITE_OMIT_AUTOINIT, автоматические вызовы sqlite3_initialize() пропускаются, и приложение должно вызвать sqlite3_initialize() напрямую перед использованием любого другого интерфейса SQLite. Для максимальной переносимости рекомендуется, чтобы приложения всегда вызывали sqlite3_initialize() напрямую перед использованием любого другого интерфейса SQLite. Будущие версии SQLite могут потребовать этого. Другими словами, поведение, наблюдаемое при компиляции SQLite с SQLITE_OMIT_AUTOINIT, может стать стандартным в будущих версиях SQLite.
Процедура sqlite3_os_init() выполняет операционную систему специфичную инициализацию библиотеки SQLite. Процедура sqlite3_os_end() отменяет действие sqlite3_os_init(). Типичные задачи, выполняемые этими процедурами, включают выделение или освобождение статических ресурсов, инициализацию глобальных переменных, настройку модуля sqlite3_vfs по умолчанию или настройку конфигурации с помощью sqlite3_config().
Приложение никогда не должно вызывать sqlite3_os_init() или sqlite3_os_end() напрямую. Приложение должно вызывать только sqlite3_initialize() и sqlite3_shutdown(). Интерфейс sqlite3_os_init() вызывается автоматически sqlite3_initialize(), а sqlite3_os_end() — sqlite3_shutdown(). Соответствующие реализации sqlite3_os_init() и sqlite3_os_end() встроены в SQLite при компиляции для Unix, Windows или OS/2. При компиляции для других платформ (используя опцию компиляции SQLITE_OS_OTHER=1) приложение должно предоставить подходящую реализацию sqlite3_os_init() и sqlite3_os_end(). Реализация sqlite3_os_init() или sqlite3_os_end(), предоставленная приложением, должна возвращать SQLITE_OK при успехе и другой код ошибки при неудаче.
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/initialize.html