本人水平相当有限,不当之处还望大家多多指教。
做内核开发的朋友,可能对下面的代码都很眼熟。
static const struct file_operations xxx_fops = {
.owner = THIS_MODULE,
.llseek = no_llseek,
.write = xxx_write,
.unlocked_ioctl = xxx_ioctl,
.open = xxx_open,
.release = xxx_release,
};
一般我们在xxx_open中会用类似如下的代码分配一块内存。
file->private_data = kmalloc(sizeof(struct xxx), GFP_KERNEL);
然后在接下来的read/write/ioctl中,我们就可以通过file->private_data取到与此文件关联的数据。
最后,在xxx_release中,我们会释放file->private_data指向的内存。
如果只是上面这几种流程访问file->private_data所指向的数据,基本上不会出问题。
因为内核的文件系统框架已经做了很完善的处理。
对于迸发访问,我们自己也可以通过锁等机制来解决。