【发布时间】:2021-07-14 11:48:33
【问题描述】:
我目前正在研究如何从 python 使用 v4l2 设备,并发现 python 有一个 ioctl 的绑定 (https://docs.python.org/3/library/fcntl.html)。
我在 C 中做了一些实现,但我很难理解 ioctl 是否与 v4l2_ioctl 相同?
它们似乎采用完全相同的参数,在官方示例中,我看到两者都包装在一个函数中,以相同的方式使用:
static void xioctl(int fh, int request, void *arg)
{
int r;
do {
r = v4l2_ioctl(fh, request, arg);
} while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));
if (r == -1) {
fprintf(stderr, "error %d, %s\\n", errno, strerror(errno));
exit(EXIT_FAILURE);
}
}
对于普通的 ioctl:
static int xioctl(int fh, int request, void *arg)
{
int r;
do {
r = ioctl(fh, request, arg);
} while (-1 == r && EINTR == errno);
return r;
}
我查看了 linux 存储库,但无法弄清楚两者之间的确切区别。
我可以互换使用 ioctl 和 v4l2_ioctl 吗?
如果是,为什么两者都存在?
如果不是,与 v4l2_ioctl 相比,ioctl 的局限性是什么?
【问题讨论】:
-
in the official examples i see both wrapped in a function,有哪些例子?