簡體   English   中英

_IOR第三個參數的實際含義

[英]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_ATEST_GET_NUM_BTEST_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM