Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > [kernel] Избавление от глобальныйх переменных


Автор: null56 11.1.2011, 13:43
Всем привет
Возник один вопрос по поводу оформления программного кода, на тему "как принято".
- у меня есть структура сокетных буферов
Код

struct sk_buff_head {
        /* These two members must be first. */
        struct sk_buff  *next;
        struct sk_buff  *prev;

       __u32           qlen;
       spinlock_t      lock;
};

- инициализирую ее в init при загрузке модуля
- использую ее в обработчиках событий, таких как обработка hrtimer, обработчик приходящих пакетов (packet_type)
- освобождаю ее при отгрузке модуля
самое простое решение - создать глобальный экземплятр структуры очереди
Код

static struct sk_buff_head my_buff_queue;

но хорошее ли это решение?
Вопрос: как принято поступать при разработке модулей в таких ситуациях и как это реализовать?

заранее благодарен за помощь

Автор: Vicul 12.1.2011, 10:29
Да проще наверно все же через глобальную переменную. В ядре это широко используется, например, та же current - указатель на текущий процесс.

Да и еще,

Код

        struct sk_buff  *next;
        struct sk_buff  *prev;


почему вы не используйте в своей структуре связанные списки struct list_head из <linux/list.h>? 

Автор: MAKCim 12.1.2011, 11:32
так и надо
не забывать только static

Автор: null56 12.1.2011, 11:33
Цитата(Vicul @  12.1.2011,  10:29 Найти цитируемый пост)
почему вы не используйте в своей структуре связанные списки struct list_head из <linux/list.h>? 

потому что это не моя структура, а ядерная
http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/linux/skbuff.h#L114
для нее есть свои методы в ядре

Автор: null56 12.1.2011, 13:07
спасибо за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)