![](/img/trans.png)
[英]What will happen we pass -1 as value for 3rd parameter in strncmp() ie. n number bytes of bytes to compare?
[英]Real meaning of the 3rd parameter of _IOR
我有一個驅動程序和守護程序,使用ioctl的守護程序訪問驅動程序,我對_IOR
的第三個參數有些困惑:
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
我有一些如下代碼, ioctl cmd定義:
#define TEST_GET_NUM_A _IOR(TESTIO, 0x01, uint8_t *)
#define TEST_GET_NUM_B _IOR(TESTIO, 0x02, uint8_t)
驅動程序中的ioctl :
case TEST_GET_NUM_A:
rc = put_user(data->num_keys, (uint8_t __user *) arg);
break;
case TEST_GET_NUM_B:
rc = put_user(data->num_keys, (uint8_t __user *) arg);
break;
守護進程中的ioctl :
uint8_t num_keys = 0;
rc = ioctl(fd, TEST_GET_NUM_A/TEST_GET_NUM_B, &num_keys);
if (rc < 0) {
ALOGE("ioctl failed %d", rc);
close(fd);
return rc;
}
TEST_GET_NUM_A
和TEST_GET_NUM_B
都TEST_GET_NUM_A
TEST_GET_NUM_B
工作,不會發生崩潰。 我的問題是哪一個是正確的,還是兩者都正確?
_IOR(type,nr,size)
size是表示ioctl(fd, TEST_GET_NUM_A/B, &num_keys)
中第3個參數的大小,還是表示從內核傳遞到用戶空間的數據的大小?
類型的大小成為ioctl數字的一部分。 這是為了在內核和用戶空間意外使用不同類型(或相同類型的不同定義)時捕獲錯誤。
但是該字段對ioctl的行為沒有影響(除非您的驅動程序明確讀取了它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.