如何使用 ioctl return 负整数作为有效结果?

How to return negative integer as valid result using ioctl?

我需要将整数传递给内核模块,在那里计算 sin 和 return 结果。

首先内核内置了sinfixp_t fixp_sin(unsigned int degrees)函数,即returns定点数(可以为负数)

所以,我的问题是:如果我使用 ioctl 将整数传递给内核模块,计算 sin,我如何才能 return 返回负结果?

ioctl 将负 return 值检测为错误。

I need to pass integer to kernel module, calculate sin there and return result.

可以传递结构而不是将整数值传递给ioctl()。此结构可以具有输入和输出数据字段。没有必要弄乱 ioctl() return 值。

将结构传递给字符驱动程序的 ioctl() 示例
https://github.com/jeyaramvrp/kernel-module-programming/tree/master/sample-char-dir

ioctl() 绝不意味着 return 浮点值。但是你可以传递一个指向你的用户空间内存的指针,它可以被填充:

float f = 1.0;
ioctl(fd, SIOCCALCSIN, &f);

f 在这里是一个 inout-parameter,取你计算正弦的值并被结果覆盖。