add358 发表于 2011-06-29 15:38

对ldd3中注册字符设备的疑问

在LDD3字符设备驱动程序章节中,
给出的注册字符设备的代码是这样:
static void scull_setup_cdev(struct scull_dev *dev,int index)
{
int err,devno = MKDEV(scull_major,scull_minor+index);

cdev_init(&dev>cdev,&scull_fops); /* A */
dev->cdev.owner = THISMODULE;         
dev->cdev.ops = &scull_fops;    /* B */
err = cdev_add(&dev->cdev,devno,1);
}
其中cdev_init函数原型:
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
{
        memset(cdev, 0, sizeof *cdev);
        INIT_LIST_HEAD(&cdev->list);
        kobject_init(&cdev->kobj, &ktype_cdev_default);
        cdev->ops = fops;
}
在这个函数中,已经有给cdev->ops赋值了。
为什么还要在行B中再次给它赋值呢?

ww2000e 发表于 2011-06-29 16:33

没发现,关注下

Trigger_Huang 发表于 2011-06-29 18:26

额,这个确实有点怪哦, 至少我的所有字符设备驱动中都没有加dev->cdev.ops = &scull_fops 这一句

奇门遁甲-lu 发表于 2011-06-30 00:45

完全多余的。
没什么奇怪的啊。
大牛也有笔误和废话的时候。

add358 发表于 2011-06-30 08:44

回复 4# 奇门遁甲-lu


    如果是笔误,那也太明显了吧,作者应该会注意到的。再者这本书都第3版了

奇门遁甲-lu 发表于 2011-06-30 09:06

回复 5# add358


      就好比内核代码也有些冗余的代码。常看到一部分的补丁就修改像上面的这些冗余代码。

oceanljp 发表于 2011-07-08 16:18

恩,看书时,我也在这行“多此一举”的代码上纠结了一小段时间啊。。。
这行应该是多余的。

lelee007 发表于 2011-07-10 14:28

:luya:

btw616 发表于 2011-07-25 20:45

我也为此纠结了好久。。。

jeffade 发表于 2012-05-31 16:07

本事就是多余的。可以去掉B
页: [1]
查看完整版本: 对ldd3中注册字符设备的疑问