提问者:小点点

有人能解释一下这一段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 *);

希望如此,谢谢你!


共1个答案

匿名用户

具体来说,(*llseek)这个词是一个对象投射吗?

形式为< code > < I > type (* < I > name )(< I > parameter information )的声明将name声明为函数返回类型的指针。

此语法是否

不,它没有特定的名称,尽管它可以被描述为一个函数指针。要了解这些东西,最好是阅读C教科书,而不是尝试在单个主题上进行尝试。或者,如果你有一些C经验,并且成功完成了一些计算机科学理论课程,你可以阅读C标准本身。主要部分(讨论基础语言,没有库或可选部分)只有130页,因此比许多教科书都要少。

为什么“struct file *”没有变量名称,我如何访问它(假设我需要或允许访问它)。

这是函数中参数类型的声明。它表示该参数是指向结构文件的指针。要调用函数,您只需要知道其参数的类型,以便可以正确转换参数并将其传递给它。您不需要为这些参数指定名称。

同样,其余参数没有变量名称“loff_t,int”,这是为什么?

同上。

最后,__user(在本例中或一般情况下)是宏吗?

它可能是用于为编译器扩展提供文本的宏。它可以为被声明的参数提供属性。