커 널 링크

노드 삭제
추출 데이터 구조
list_entry (ptr, type, member)//type 데이터 구조 유형, member 는 list헤드 대응 멤버 명
노드 의 지침 을 되 돌려 줍 니 다.
이미 알 고 있 는 데이터 구조 에서 노드 포인터 ptr 는 데이터 구 조 를 찾 습 니 다. 예 를 들 어:
두루
list_for_each (struc list head * pos, struc list head * head)//실현 방법 을 기억 하 세 요.
pos 는 자동 으로 변 합 니 다. 순환 할 때마다 다음 노드 를 가리 킵 니 다.
예:
struct list_head *entry;
struct list_head cs46xx_devs;//체인 헤드
list_for_each(entry,&cs46xx_devs)
{
card = list_entry(entry,struct cs_card,list);
if(card->dev_midi == minor)
break;
}
예:
MODULE_ALIAS("List module");
struct student
{
	char name[100];
	int num;
	struct list_head list;
};
struct student *pstudent;
struct student *tmp_student;
struct list_head student_list;
struct list_head *pos;

int mylist_init()
{
	int i=0;
	INIT_LIST_HEAD(&student_list);
	pstudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL);
	memset(pstudent,0,sizeof(struct student)*5);
	for(i=0;i<5;i++)
	{
		sprintf(pstudent[i].name,"Student %d",i+i);
		pstudent[i].num = i+1;
		list_add(&(pstudent[i].list), &student_list);
	}
	list_for_each(pos,&student_list)
	{
		tmp_student = list_entry(pos,struct student,list);
		printk("<0>studnet %d name: %s 
",tmp_student->num,tmp_studnet->name); } return 0; } void mylist_exit() { int i; for() { list_del(&(pstudent[i].list)); } kfree(pstudent); } module_inti(mylist_init); module_exit(mylist_exit);

좋은 웹페이지 즐겨찾기