我不明白你们讨论的全局变量的想法是什么意思?这和全局变量一点关系也没有。不同的进程访问相同设备,用的是不同的file结构体实例,文件指针也不一样。。比方说这个进程想读这一段地址的内容,那个进程想读那一块地址的内容。。。。对同一设备同时访问会有冲突,而这个冲突是由进程调度,中断来解决的
--
Best Regards,
Yu Rong Tan
我想您所说的对同一设备同时访问会有冲突,而这个冲突是由进程调度解决的,指的是那些非自定义的数据结构。
你还是没明白。多个相同设备是怎么区分它们的,多个设备名吧,每一个设备名在用到时都对应一个file实例,冲突吗?
> 我想您所说的对同一设备同时访问会有冲突,而这个冲突是由进程调度解决的,指的是那些非自定义的数据结构。
非自定义,自定义的都包括!
你摘抄的这些话告诉你使用这个private_data指针来挂驱动程序,这样你的驱动程序就可以支持多个应用程序同时调用。而我的那段话是向你解释为什么它能做到。
单单一个全局变量是做不到这些事的,会有很多问题,不信你试试就知道了。private_data在这里的功能绝不能和于全局变量划等号。
private_data的含义是设备的私有数据,体现了一种良好的面向对象的封装思想。将一个对象以及对象的属性(在这里private_data的具体内容是自定义的)进行封装。譬如同类型的设备有A,B,C,D,简单的通用层的数据结构并不能涵盖设备的全部属性,因此我们有一个private_data可以让他们自己每人再挂上自己的对象的属性。简单地说,private_data作为结构体的成员(它本身也很可能是一个结构体),被和设备的其他属性捆绑在一起,因此,在任何场合下,拿到了设备的句柄,也就拿到了它的private_data所指向的属性。
它表面上和全局变量没有任何关系,但是间接上与全局变量有巨大的关系。如果不能通过struct封装这些属性,则针对具体设备,如何拿到这些属性?正是private_data已经通过指针将其绑定到了相应的结构体中,才可以透过结构体指针的成员直接拿到它。否则,多个实例势必要使用多个全局变量进行区分。
我不害伯人,伯人因我而死。