我想ioctl EVIOCGRAB在基于 C 的程序中使用该函数,并且通过谷歌搜索我找到了使用该函数的各种示例源代码,但我正在努力寻找正确描述如何正确使用它的明确文档。
我从ioctl(2)看到,ioctl函数被定义为
int ioctl(int d, unsigned long request, …);
Run Code Online (Sandbox Code Playgroud)
然后:
The third argument is an untyped pointer to memory. It's traditionally char
*argp (from the days before void * was valid C), and will be so named
for this discussion.
Run Code Online (Sandbox Code Playgroud)
我希望EVIOCGRAB在ioctl_list(2) 中找到,但事实并非如此。
所以我不知道EVIOCGRAB函数的第三个参数应该是什么。在看到各种示例代码之后,我所能做的就是假设一个非零值抓住了设备,而一个零值释放了它。
我从随机代码示例中得到的,例如
int grab = 1;
ioctl(fd, EVIOCGRAB, &grab);
..
ioctl(fd, EVIOCGRAB, NULL);
Run Code Online (Sandbox Code Playgroud)
或者
ioctl(fd, EVIOCGRAB, (void*)1);
..
ioctl(fd, EVIOCGRAB, …Run Code Online (Sandbox Code Playgroud)