6.下面的代码是 linux kernel的代码,请指出其中的错误来: struct student{ int id; char name[20]; struct list_head 1ist; }; static LIST_HEAD(student_list); static DEFINE MUTEX(student_mutex); static int add_student(struct student *stu) { struct student *new_stu = NULL; if(!stu) { printk(KERN_ ERR " Invalid argument\n"); return -EINVAL; } if (stu->id <= 0){ i printk(KERN_ ERR "Invalid id\n"); return -EINVAL; } if(!mutex_trylock(&student_mutex)){ printk(KERN_ INFO "Failed to lock mutex\n"); return-EBUSY; } new_stu = kmalloc(sizeof(struct student), GFP KERNEL); if(!new_ stu) { printk(KERN ERR "Failed to allocate memory\n"); return -ENOMEM; *new_stu= *stu; list_add_ tail(&new_stu->list, &student_list); printk(KERN_ INFO "Added student: id=%d, name-%s\n", stu->id, stu->name); mutex_unlock(&student_mutex); return 0; }
时间: 2023-12-03 19:45:34 浏览: 33
代码中存在以下错误:
1. 在 struct student 结构体中定义了一个名为 1ist 的成员,但是应该是 list。
2. 定义互斥锁时,应该是 DEFINE_MUTEX,而不是 DEFINE MUTEX。
3. 在第 14 行代码中,if(!new_ stu) 应该是 if(!new_stu)。
4. 在第 16 行代码中,缺少一个右括号。
5. 在第 18 行代码中,应该将 new_stu 的内容初始化为 0。
6. 在第 20 行代码中,应该将添加到链表中的元素是 new_stu,而不是 stu。
综上所述,正确代码应该是:
```
struct student {
int id;
char name[20];
struct list_head list;
};
static LIST_HEAD(student_list);
static DEFINE_MUTEX(student_mutex);
static int add_student(struct student *stu) {
struct student *new_stu = NULL;
if (!stu) {
printk(KERN_ERR "Invalid argument\n");
return -EINVAL;
}
if (stu->id <= 0) {
printk(KERN_ERR "Invalid id\n");
return -EINVAL;
}
if (!mutex_trylock(&student_mutex)) {
printk(KERN_INFO "Failed to lock mutex\n");
return -EBUSY;
}
new_stu = kmalloc(sizeof(struct student), GFP_KERNEL);
if (!new_stu) {
printk(KERN_ERR "Failed to allocate memory\n");
mutex_unlock(&student_mutex);
return -ENOMEM;
}
memset(new_stu, 0, sizeof(struct student));
*new_stu = *stu;
list_add_tail(&new_stu->list, &student_list);
printk(KERN_INFO "Added student: id=%d, name=%s\n", stu->id, stu->name);
mutex_unlock(&student_mutex);
return 0;
}
```