请教结构体定义--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, 也可以看代码.