kernel hlist 관련
글쓴이: choboja / 작성시간: 화, 2010/09/14 - 12:56오전
/** * hlist_for_each_entry - iterate over list of given type * @tpos: the type * to use as a loop cursor. * @pos: the &struct hlist_node to use as a loop cursor. * @head: the head for your list. * @member: the name of the hlist_node within the struct. */ #define hlist_for_each_entry(tpos, pos, head, member) \ for (pos = (head)->first; \ pos && ({ prefetch(pos->next); 1;}) && \ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ pos = pos->next) #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
리눅스 hash list에 대해 공부중입니다.
({ prefetch(pos->next); 1;})
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;})
이 두경우에서 뒤에 1;이 조건식을 무조건 참으로 만드는 경우라는데,
테스트를 해보니
printf("%d\n", 1 && ( { 1; 0; } ) ); => 0 printf("%d\n", 1 && ( { 0; 1; } ) ); => 1
음 결과는 나오는데 어떻게 저렇게 연산이 되는건가요?
답변 부탁드리겠습니다.
linux kernel에서 hlist관련 잘 분석된 자료가 없을까요~
감사합니다.
Forums:
gcc 확장 기능
gcc에서 제공하는 확장 기능이구요 (표준이 아닌..)
({ ... })의 형태로 expression 내에 (compound) statement를 삽입할 수 있으며
이 때 가장 마지막 statement의 값이 expression의 값으로 사용됩니다.
http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
헉. 또 pastime님이네요. 감사합니다.
커널관련 개발하시나보네요.
제가 질문한걸 다 답변해주시네요.
다시한번 감사드립니다.
이건 개인적인 질문입니다.
그런데 책에 나오지 않는 부분( 새로 바뀐 커널의 내용 )을 공부하실때 어떻게 정리하시나요?
2.6 커널에서 새로 적용된 부분을 공부하는데 내용이 많아지니 정리가 잘 안됩니다.
즉, 연결 고리가 정확하게 끼워지지 않네요.
어떻게 공부하시고 어떻게 정리하시는지 궁금하네요.
다른 고수분들은 바쁘셔서
그나마 시간이 남는 제가 답변을 달고 있습니다만
저도 지식이 미약한지라 모르는 것이 많습니다.
같이 공부하는 입장에서 말씀드리면
주로 http://kernelnewbies.org 혹은 http://lwn.net 등에서 개념을 익히고
커널 내에 포함된 문서와 소스를 함께 보면서 삽질하는 방법을 사용 중입니다.
필요한 경우 가끔 git commit log 등도 함께 살펴보면 도움이 됩니다.
새로 알게된 지식은 개인 블로그에 정리해두고 있는데 (가능하면 그림도 그려가며)
저도 역시 새로운 내용들이 많아질수록 정리하는 데 어려움이 늘어나서
갈수록 글 올리기가 힘들어지는군요..