可能重複:
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