List를 C로만 구성하기 위해서 공개된 list 를 참고해 본다.
일단 http://lxr.linux.no/source/include/linux/list.h 를 참조.
전체 소스 ~
일단 http://lxr.linux.no/source/include/linux/list.h 를 참조.
1. 보통 리스트를 구현할 때 리스트와 자료형을 같이 사용하지만 이런 구현은 매번 리스트를 따로 구현해야하는 아픔이 있다.
2. 그래서 리스트의 구조를 구조체를 만들때 그 밑에 구현 해 놓는 방식을 사용하도록 한다.
3. 이렇게 되면 리스트를 포함 시켜놓으면 헤더 파일을 중심으로 리스트를 가질수 있다.

4. 리스트의 추가는 앞뒤의 객체에게 알려주면 된다.
5. 구조체의 내용을 읽기 위해선 시작위치를 0으로 시작한다는 개념을 잡아야 한다.

2. 그래서 리스트의 구조를 구조체를 만들때 그 밑에 구현 해 놓는 방식을 사용하도록 한다.
3. 이렇게 되면 리스트를 포함 시켜놓으면 헤더 파일을 중심으로 리스트를 가질수 있다.

4. 리스트의 추가는 앞뒤의 객체에게 알려주면 된다.
void __list_add(struct list_head *new=0x3004,
struct list_head *prev=0x1000,
struct list_head *next=0x2004)
{
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
}
5. 구조체의 내용을 읽기 위해선 시작위치를 0으로 시작한다는 개념을 잡아야 한다.
#define list_entry( temp, type, list ) \
((type *)((char*)temp – (unsigned long)(&((type *)0)->list)))
TASK *p = list_entry( temp, TASK, list );
p->pid;
전체 소스 ~
more..