有人可以解释这段linux设备驱动程序代码中的C语法吗?
具体来说,(*llseek) 术语是对象转换吗?这个语法 < ( * < name > ) (...) > 是否有一个术语,我可以谷歌搜索它以了解更多信息。
为什么“struct file *”没有变量名,以及如何访问它(假设我需要或允许访问它)。同样,其余参数没有变量名“loff_t,int”,这是为什么呢?最后, __user (在这个例子中或 __ 通常)是一个宏吗?
struct file_operations {
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
谢谢!
回答
具体来说,(*llseek) 术语是对象转换吗?
形式的声明将name声明为指向返回type的函数的指针。type (* name)(parameter information)
这个语法 < ( * < name > ) (...) > 是否有一个术语,我可以谷歌搜索它以了解更多信息。
不是,虽然它可以被描述为函数指针,但它没有特定的名称。要了解这些内容,建议您阅读 C 教科书,而不是试图刺探单个主题。或者,如果您有一些 C 经验并成功完成了一些计算机科学理论课程,您可以阅读 C 标准本身。主要部分(讨论基础语言,没有图书馆或可选部分)只有 130 页,比许多教科书都要少。
为什么“struct file *”没有变量名,以及如何访问它(假设我需要或允许访问它)。
这是函数中参数类型的声明。它说参数是一个指向 a 的指针struct file。要调用一个函数,你只需要知道它的参数类型是什么,这样参数就可以正确转换并传递给它。您不需要为这些参数指定名称。
同样,其余参数没有变量名“loff_t,int”,这是为什么呢?
和上面一样。
最后, __user (在这个例子中或 __ 通常)是一个宏吗?
它可能是一些用于为编译器扩展提供文本的宏。它可以为被声明的参数提供属性。