什么是不调用libusb的后果

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

说明书说:

取消初始化libusb。

应在关闭所有打开的设备之后并在应用程序终止之前调用。

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


这是涉及上下文的事情。

至于你有一个单一的用户应用程序,通常最终会使用默认的上下文。 只要用户的会话被销毁,那个人就会死亡,这可能是您的应用程序要关闭时。
还要注意,你不能简单地泄漏,因为如果你的应用程序崩溃,你就不会调用libusb_exit (尽管泄漏是可能的,泄漏的内存将在崩溃后立即释放,所以我不会在意这一点关于崩溃本身的原因)。

无论何时您有多个会话都会出现问题。
详情请看这里和这里。
如果在这种情况下调用libusb_exit失败,并且从应用程序的角度来看,会话处于已发布状态,那么肯定会泄漏内存,因为上下文不会被libusb实际销毁。 事实上,在这种情况下,软件不会被关闭,但该内存仍在使用中,不再可到达,因为您没有调用libusb_exit来释放它。

这就是为什么文档建议每次你想销毁一个上下文时调用libusb_exit ,或者是默认的。

链接地址: http://www.djcxy.com/p/33707.html

上一篇: What are consequences of not calling libusb

下一篇: Sending a signal to a perl script while it is closing a filehandle