如何解决有人可以解释这段 linux 设备驱动程序代码中的 C 语法吗?
具体来说,(*llseek) 术语是对象转换吗?这个语法 ) (...) > 是否有一个术语,我可以在谷歌搜索它以了解更多信息。
为什么“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) 术语是对象转换吗?
type (* name)(parameter information)
形式的声明将 name 声明为指向返回 type 的函数的指针。
这个语法 ) (...) > 有一个术语,我可以谷歌搜索它以了解更多信息。
不是,虽然它可以被描述为函数指针,但它没有特定的名称。要了解这些内容,建议您阅读 C 教科书,而不是试图刺探单个主题。或者,如果您有一些 C 经验并成功完成了一些计算机科学理论课程,您可以阅读 C 标准本身。主要部分(讨论基础语言,没有图书馆或可选部分)只有 130 页,比许多教科书都要少。
为什么“struct file *”没有变量名,我如何访问它(假设我需要或允许访问它)。
这是函数中参数类型的声明。它说参数是一个指向 struct file
的指针。要调用一个函数,你只需要知道它的参数类型是什么,这样参数就可以正确转换并传递给它。您不需要为这些参数命名。
同理,其余参数没有变量名“loff_t,int”,这是为什么呢?
同上。
最后,__user(在本例中或 __ 一般情况下)是宏吗?
它可能是一些用于为编译器扩展提供文本的宏。它可以为声明的参数提供 attributes。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。