c – 不调用libusb_exit()的后果是什么

我正在编写一个与USB视频播放控制器交互的用户空间程序.我在C编程,该程序旨在在 Linux上运行.在研究libusb手册时,我遇到了void libusb_exit(struct libusb_context * ctx)函数.

描述says

Deinitialize libusb.

Should be called after closing all open devices and before your
application terminates.

手册没有解释为什么需要它.我对终止已初始化并使用libusb的程序而不调用libusb_exit()的后果感到好奇.如果由于某些原因我的程序在终止之前无法调用libusb_exit(),有人可以解释可能会发生什么坏事吗?它会导致系统资源泄漏吗?

解决方法

这是涉及背景的事情.

只要您拥有单个用户应用程序,通常最终会使用认上下文.每当用户的会话被销毁时,那个就会死掉,这可能是你的应用程序被关闭的时候.
另请注意,您不能简单地泄漏,因为如果您的应用程序崩溃,您不会调用libusb_exit(好吧,即使可能发生泄漏,泄漏的内存将在崩溃后立即释放,所以我不会关心它关于崩溃本身的原因).

只要您有多个会话,就会出现问题.
有关详细信息,请参见herehere.
如果在这种情况下调用libusb_exit失败并且会话从应用程序的角度来看处于释放状态,那么肯定会泄漏内存,因为libusb实际上不会破坏上下文.事实上,在这种情况下,软件不会被关闭,但是该内存仍在使用中且无法再访问,因为您没有调用libusb_exit来释放它.

这就是为什么文档建议每次要破坏上下文时调用libusb_exit,无论是否为认上下文.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...