Чтобы все работало как надо, рекомендуемым подходом здесь является использование функции-инициализатора
Какую функцию запрограммировать первой — это будет зависеть от того, какой администратор ресурсов вы пишете. Если это администратор файловой системы, отвечающий за точку монтирования и все, что под ней, то вам, скорее всего, лучше всего начать с функции
Независимо от того, с чего вы начинаете, вам нужно будет удостовериться в том, что ваши функции вызываются так, как вы предполагаете. В данном ключе функции-обработчики POSIX- уровня по умолчанию обладают очень полезным свойством — их можно помещать непосредственно в таблицы функций установления соединения и таблицы функций ввода/вывода.
Это означает, что если вы захотите что-то дополнительно проконтролировать, просто добавьте дополнительный диагностический вызов
Вот фрагмент администратора ресурсов, который перехватывает функцию
// Упреждающая декларация
int io_open(resmgr_context_t*, io_open_t*,
RESMGR_HANDLE_T*, void*);
int main() {
// Все как в примере /dev/null,
// кроме следующего за этой строкой:
iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &cfuncs,
_RESMGR_IO_NFUNCS, &ifuncs);
// Добавьте это для перехвата управления:
cfuncs.open = io_open;
Если вы описали функцию
int io_open(resmgr_context_t *ctp, io_open_t *msg,
RESMGR_HANDLE_T *handle, void *extra) {
printf("Мы в io_open!\n");
return (iofunc_open_default(ctp, msg, handle, extra));
}
Таким образом, вы по-прежнему применяете POSIX-обработчик по умолчанию
Очевидно, что вы могли бы выполнить аналогичные действия для функций
Как мы уже намекнули выше в разделах, посвященных краткому рассмотрению клиента и администратора ресурсов, последовательность действий начинается на клиентской стороне с вызова
Это действительно ключевой момент, потому что функция
Но на самом деле роль функции
• инициализацию внутренних параметров библиотеки;
• привязку к запросу контекстного блока;
• привязку к контекстному блоку атрибутной записи.
Первые две операции выполняются с помощью функции базового уровня
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT