gpt4 book ai didi

c - Linux设备驱动程序: Is it possible to pass a char* to unlocked_ioctl?

转载 作者:行者123 更新时间:2023-11-30 15:01:20 25 4
gpt4 key购买 nike

是否可以在不使用包含 char* 大小的结构的情况下将 char* 传递给unlocked_ioctl?

最佳答案

参数是什么由驱动程序决定。 KDGETLED是一个已经存在的并且被记录为采用 char *。它最终是 vt_do_kdskled它将一个字节写入参数指向的地址。

更新

unlocked_ioctlioctl(2) 系统调用的内部实现。 ioctl(2) 的手册指出:

The third argument is an untyped pointer to memory. It's traditionally char *argp (from the days before void * was valid C),

因此,在具有签名 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);unlocked_ioctl 中,第三个参数被强制转换为任何驱动程序指定。

您可以在我上面引用的 vt_do_kdskled 示例中看到这一点,其中该参数接受第 2099 行的单字节结果:

int vt_do_kdskled(int console, int cmd, unsigned long arg, int perm)
{
....
case KDGETLED:
ucval = getledstate();
return put_user(ucval, (char __user *)arg);

这个arg参数是通过来自vt_ioctl的ioctl调用到达这里的。 。它刚刚传递给实现。

关于c - Linux设备驱动程序: Is it possible to pass a char* to unlocked_ioctl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com