- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
struct file_operations中的unlocked_ioctl的签名是
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
而 man 2 ioctl 说 ioctl(2) 的签名是:
int ioctl(int d, int request, ...);
我知道参数是如何在内核内部被破坏的,但是为什么内核空间的返回类型是long,而用户空间的返回类型是int?当我想返回一个负值作为错误时,这会产生一个问题:由于二补码编码,我返回的所有负值都会变成 -1。
最佳答案
如果从 file_operations
函数返回负值,内核会将其解释为负 errno
(即错误返回)。然后,用户代码获取 -1
作为返回值,并将 errno
设置为原始返回值的负值。这与二进制补码无关。
每man 2 intro
、“系统调用简介”:
On error, most system calls return a negative error number (i.e.,the negated value of one of the constants described in errno(3)).The C library wrapper hides this detail from the caller: when asystem call returns a negative value, the wrapper copies theabsolute value into the errno variable, and returns -1 as thereturn value of the wrapper.
例如,如果您从 unlocked_ioctl
返回 -ENOTTY
,则用户程序会从 ioctl
获取 -1 且 errno = ENOTTY
.
关于c - 为什么 file_operations 中的 unlocked_ioctl 返回 long,而 sys/ioctl.h 中的 ioctl() 返回 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127684/
在我的驱动程序的 file_operations 结构中,我有: struct file_operations Fops = { read: device_read, write:
是否可以在不使用包含 char* 大小的结构的情况下将 char* 传递给unlocked_ioctl? 最佳答案 参数是什么由驱动程序决定。 KDGETLED是一个已经存在的并且被记录为采用 cha
我正在尝试为 RTC(实时时钟)实现驱动程序。我用了ioctl kernel 2.6.32中的函数.它工作得很好。但是当我在内核 3.13.0 中运行相同的驱动程序时,它给出了一个错误 ‘struct
struct file_operations中的unlocked_ioctl的签名是 long (*unlocked_ioctl) (struct file *, unsigned int, unsi
我是一名优秀的程序员,十分优秀!