微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以解释这段 linux 设备驱动程序代码中的 C 语法吗?

如何解决有人可以解释这段 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 举报,一经查实,本站将立刻删除。