可能重复:
Unsigned long with negative value为什么printf显示unsigned int的负值?
我写了一个内核模块,它会中断任何系统调用,打印传递给系统调用函数当前USER_ID和输入参数。其中一个是sys_ioctl(),如下所示:
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd,unsigned long arg);
这意味着所有输入参数都是无符号整数。
但是当我打印的输入参数,我得到下面的输出:
fd=21, cmd=-1072143871 and arg=3202983648
fd=21, cmd=-1072143871 and arg=3202983648
fd=21, cmd=-1072143871 and arg=3202983648
----------
这里是我的函数的定义:
asmlinkage long our_sys_ioctl(unsigned int fd , unsigned int cmd , unsigned long arg)
{
uid_t gtuid ;
gtuid = getuid_call();
printk ("our_sys_ioctl ---> uid = %d with fd=%i, cmd=%i and arg=%lu \n ", gtuid, fd, cmd, arg);
return original_call_ioctl(fd , cmd , arg);
}
任何想法,为什么CMD值为负,并且这些值的含义?
你打印的值如何? –
你如何打印你的号码?也许你隐式地将它们转换为有符号整数? – Mario
刚刚更新了问题 – Junaid