如何使用ioctl将负整数作为有效结果返回?

时间:2016-01-25 21:37:54

标签: c linux-device-driver kernel-module ioctl

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

首先,内核有内置的sin fixp_t fixp_sin(unsigned int degrees)函数,它返回定点数(可以是负数)。

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

ioctl将负返回值检测为错误。

2 个答案:

答案 0 :(得分:2)

  

我需要将整数传递给内核模块,然后在那里计算sin   返回结果。

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

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

答案 1 :(得分:2)

ioctl()永远不会返回浮点值。但是您可以将指针传递给可以填充的用户空间内存:

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

f这里是一个inout参数,取你计算窦的值并被结果覆盖。