首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >v4l2_ioctl与ioctl的差异

v4l2_ioctl与ioctl的差异
EN

Stack Overflow用户
提问于 2021-04-20 09:34:03
回答 1查看 1K关注 0票数 1

我目前正在研究如何从python中使用v4l2设备,并发现python对ioctl (https://docs.python.org/3/library/fcntl.html)有一个绑定。

我用C进行了一些实现,但我很难理解ioctl是否与v4l2_ioctl相同?

它们似乎采用了完全相同的论点,在我看到的官方示例中,这两种参数都封装在一个函数中,使用的方式是相同的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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的局限性是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 11:48:14

我可以交替使用ioctl和v4l2_ioctl吗?

不是的。

如果是这样的话,为什么两者都存在?

ioctl的存在是为了在设备上执行一些特殊的操作。

v4l2_ioctllibv4l2的包装器,用于简化v4l2设备上的操作。

来自自述文件

libv4l2 它提供了诸如v4l2_open、v4l2_ioctl等功能,这些功能可以使v4l2应用程序快速地与具有怪异格式的v4l2设备一起工作。libv4l2主要将调用直接传递给v4l2驱动程序。当应用程序执行不受支持的格式的TRY_FMT / S_FMT时,libv4l2将进入中间并模拟格式(如果应用程序想知道硬件真正可以实现哪种格式,则应该使用ENUM_FMT,而不是随机地尝试一堆S_FMT)。有关v4l2_函数的更多细节,请参见libv4l2.h。

在libv4l项目中找到的源是最终的代码文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67176256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档