Рассказали тут забавное про ведро, дайте комментарий, зачем так?
«Ну просто многие его части писали наркоманы, это проявляется во всем, даже в мелочах )
чего стоит даже такая казалось бы простейшая вещ как список в api ядра
но помоему только наркоман мог додуматься хранить данные не структуре элемента списка, а наоборот
и нафигачить макрос который по элементу списка, типу структуры верхнего имени и именю поля в этой структуре - вычисляет смещения и возвращает указатель на эту верхнюю структуру
это блин логика навыворот )
вот типичное использоваение списка в ядре:
struct shit {
type1 some_shit;
....
struct list_head list_item;
...
type1 some_shit;
};
И потом имея указатель ptr на list_item можем сделать: list_entry(ptr, struct shit, list_item)
и когда смотришь на это первый раз - нифига не понимаешь
читаешь доку на kernel.org - еще больше нифига не понимешь
лезешь в исходники поначалу думаешь - че за фигня, потом врубаешься и понимаешь что они наркоманы
и так во всем
#define list_entry(ptr, type, member) \ ((type *)((char *)(ptr) – (unsigned long)(&((type *)0)->member)))
может выпендриваются просто
когда начинаешь читать исходники на предмет того как vfs с инодами работает - поначалу тоже волосы шевелятся»