什么是不调用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
,或者是默认的。
上一篇: What are consequences of not calling libusb
下一篇: Sending a signal to a perl script while it is closing a filehandle