日期:2014-05-16  浏览次数:20735 次

请教结构体定义--LINUX驱动程序中语句

请教下面这个结构体定义中read:   device_read,一句是什么意思?

struct   file_operations   fops   =  
{
read:   device_read,
write:   device_write,
open:   device_open,
release:   device_release
};


------解决方案--------------------
我怀疑是 初始化 呵呵 严重怀疑
------解决方案--------------------
各位老大,这是C的基础知识呀。
无语了,不知道有没有听过“勿在浮沙之上筑高台”?
------解决方案--------------------
struct file_operations fops =
{
read: device_read,
write: device_write,
open: device_open,
release: device_release
};

应该是给fops结构体变量的read 赋初值device_read
这应该是gcc的用法,标准c应该不支持
------解决方案--------------------
类似的还有
struct test test1=
{
.a1=a1func,
.a2=a2func
...
}
------解决方案--------------------
只是语法问题吧!

------解决方案--------------------
gcc对标准C的扩展,<<LINUX设备驱动程序>>一书中说了相关的内容
------解决方案--------------------
意思是你在上层程序调用read(这个驱动文件打开后返回的句柄,xx,size)的时候,在驱动里面其实调用的是device_read
我靠这么简单的问题怎么这么多人回答的千奇百怪
------解决方案--------------------

意思是你在上层程序调用read(这个驱动文件打开后返回的句柄,xx,size)的时候,在驱动里面其实调用的是device_read
我靠这么简单的问题怎么这么多人回答的千奇百怪
==========================================
从C语法看就是:read = device_read?

============================

no,只是一种映射
------解决方案--------------------
gcc下结构体赋初值的一种语法,
标准C下一般直接struct test test1={*,*,*..},*是成员值,如device_read
是成员变量read的值
gcc把每个值和成员变量对应起来,看的更清楚.

------解决方案--------------------
这是典型的OO-C结构, file_operations结构体里保存函数指针, 形成类似于C++中的父类.
创建一个file_operations结构, 指定函数指针的地址, 类似于继承了父类的子类.
底层调用时只管调用file_ops结构的指针, 便调用了指向的函数, 类似于多态.

详细请见LDD, 也可以看代码.