【发布时间】:2012-08-21 02:19:56
【问题描述】:
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, ...);
我知道参数是如何在内核中被破坏的,但是为什么内核空间的返回类型很长,而用户空间的返回类型却是 int?当我想将负值作为错误返回时,这会产生一个问题:由于双补码编码,我返回的所有负值都会变成 -1。
【问题讨论】:
标签: c unix linux-kernel linux-device-driver ioctl