Рассмотрим программу Client
, использующую сокеты Беркли. Вызовы, которые выполняет Client
, должны направляться в VFS. Обычный путь состоит в запуске отдельного процесса VFS и создании IPC-канала. Однако вместо этого можно интегрировать функциональность VFS в сам исполняемый файл Client
. Для этого нужно при сборке исполняемого файла Client
скомпоновать его с библиотекой vfs_local
, которая будет принимать вызовы, а также с библиотеками реализации – vfs_implementation
и dnet_implementation
.
Локальную компоновку с VFS удобно использовать при отладке. Кроме того, вызовы для работы с сетью могут обрабатываться намного быстрее за счет исключения IPC-вызовов. Тем не менее, изоляция VFS в отдельном процессе и IPC-взаимодействие с ним рекомендуется во всех случаях как более безопасный подход.
Ниже приведен сборочный скрипт исполняемого файла Client
.
CMakeLists.txt
project (client)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
# Генерация файла Client.edl.h
nk_build_edl_files (client_edl_files NK_MODULE "client" EDL "${CMAKE_SOURCE_DIR}/resources/edl/Client.edl")
add_executable (Client "src/client.c")
add_dependencies (Client client_edl_files)
# Компоновка с библиотеками VFS
target_link_libraries (Client ${vfs_LOCAL_LIB} ${vfs_IMPLEMENTATION_LIB} ${dnet_IMPLEMENTATION_LIB}
Если Client
использует файловые системы, то помимо vfs_local
, его нужно скомпоновать с библиотекой vfs_fs
и реализацией используемой файловой системы. Кроме того, нужно добавить в решение драйвер блочного устройства.