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

前端之家收集整理的这篇文章主要介绍了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(),有人可以解释可能会发生什么坏事吗?它会导致系统资源泄漏吗?

@H_301_13@

解决方法

这是涉及背景的事情.

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

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

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

@H_301_13@ @H_301_13@

猜你在找的C&C++相关文章