Я так понял в ядре нет реализаций таких элементов. Если кому не сложно то не мог бы кто нить привести пример реализации какого нибудь из этих элементов, лучше того что будет быстрее функционировать в ядре.
P.S. рад бы погуглить но к сожалению трафик инета через мобилу не дешёвый, потому прошу здесь.
А вот решил воспроизвести для начала в отдельном от ядра сишнике, и вот что получилось.
struct test{
struct test *prev;
struct test *next;
char *n;
};
void __add_entry(struct test *new, struct test *prev, struct test *next)
{
printf("__add_entry start\n");
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
printf("__add_entry end\n");
}
void add_entry(struct test *new, struct test *s)
{
printf("add_entry start\n");
__add_entry(new, s, s->next);
printf("add_entry end\n");
}
int main(int argc, char *argv[])
{
int i;
struct test *s;
struct test *n;
n->n = "test";
add_entry(n,s);
printf("Done!\n");
return EXIT_SUCCESS;
}
А вот что вывод:
# ./test
add_entry start
__add_entry start
Segmentation fault
что не так?????
здесь n и s указывают куда повезёт, вот и segmentation fault вылезает. Странно, что не его нет в первом случае. :(
PS: Кстати, есть волшебная опция -Wall, которая обругала бы оба этих места во время компиляции.
PPS: Не в виде наезда: а Вы уверены, что что достаточно хорошо знаете СИ, чтобы "ядрёными" хакерствами заниматься? Там впереди ещё сюрпризов вагон и маленький поезд. И в СИ, и в использовании GCC, и в мат. части. :)
Не понтов ради будет сказано :) , но С++ я знаю хорошо, а вот с С ниразу не сталкивался, вот отсюда такие вопросы. Плюс к этому, последний раз писал почти год назад (просто что бы летом от скуки не помереть решил написать файер, как говориться just for fun). В С++ указатель инициализировался через new а С он отсутствует, что стало для меня сюрпризом потому и туплю. Не мог бы показать как эти указатели инициализировать.