在Linux内核中变量名之后扭曲使用*const*

zba*_*rni 3 c linux const

有人可以解释下面代码中实际定义的内容,以及最后的const是什么?命名变量__user__argv类型指针是否已__user创建?

const char __user *const __user *__argv
Run Code Online (Sandbox Code Playgroud)

我熟悉放置的可能性const(使指针/数据不可修改),但我从未想过上述可能性.

该片段来自内核中的此函数声明:

1593 int do_execve(const char *filename,
1594         const char __user *const __user *__argv,
1595         const char __user *const __user *__envp,
1596         struct pt_regs *regs)
Run Code Online (Sandbox Code Playgroud)

编辑:我可能不会问过我__user以前对宏的了解.尽管如此,它并不完全与重复,因为那里没有讨论定义变量的实际类型.

lis*_*rus 5

实际上,__user是一个提供一些属性的宏(这里有更多内容).因此,变量被命名__argv,它是指向const char的const指针的类型指针.