возвращаемое значение list_entry - PullRequest
0 голосов
/ 24 апреля 2011

Ребята, сено!

Я изменяю код ядра в операционной системе Rat Hat и хочу использовать макрос «запись списка». Я нигде не могу найти, что является возвращаемым значением в случае сбоя ..

Что он вернет, если список пуст? или в любом другом случае ...

Спасибо !! Ами

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

Это должно быть что-то неопределенное, если список пуст. (Вы пытаетесь разыменовать указатель списка, который не входит в структуру типа элемента списка)

Как правило, если вы должны использовать list_entry напрямую, сначала нужно проверить, есть ли list_empty. Это подтвердит, что ваш заголовок списка не указывает на себя.

В противном случае всегда используйте макросы list_for_each, которые будут генерировать цикл for для ваших элементов.

0 голосов
/ 26 апреля 2011

Мы можем использовать этот list_head двумя способами

1) независимая единая глобальная переменная, чтобы держать список как голову для всех

мы не можем использовать list_entry для этого переменного события, хотя есть члены списка в этом. потому что это не является частью какой-либо структуры.

2) мы можем использовать list_head в качестве члена вашей структуры, но если вы добавите его в список, дать этому члену указатель на список HEAD.

мы будем использовать list_entry для этого члена, чтобы получить вашу структуру, даже если ваша член списка не является частью какого-либо списка (он инициализируется с помощью next = NULL и priv = NULL) Вы можете получить структуру, нет пути к провалу.

list_entry - это просто container_of (), мы используем его для получения указателя на структуру, используя указатель на член.

...