通过 ioctl 获取设备信息,ioctl 的参数如下:
int ioctl(int fd, unsigned long request, ...);有些驱动程序对 request 的格式有要求,它的格式如下:

比如 dir 为_IOC_READ(即 2)时,表示 APP 要读数据;为_IOC_WRITE(即 4)时,表示 APP 要写数据。
size 表示这个 ioctl 能传输数据的最大字节数。
type、nr 的含义由具体的驱动程序决定。
比如要读取输入设备的 evbit 时,ioctl 的 request 要写为“EVIOCGBIT(0, size)”,size 的大小可以由你决定:你想读多少字节就设置为多少。这个宏的定义如下:

APP 调用 open 函数时,传入“O_NONBLOCK”表示“非阻塞”。 APP 调用 read 函数读取数据时,如果驱动程序中有数据,那么 APP 的 read 函数会返回数据,否则也会立刻返回错误。
APP 调用 open 函数时,不要传入“O_NONBLOCK”。 APP 调用 read 函数读取数据时,如果驱动程序中有数据,那么 APP 的 read 函数会返回数据;否则 APP就会在内核态休眠,当有数据时驱动程序会把 APP 唤醒,read 函数恢复执行并返回数据给 APP。