我正在编写一个与USB视频播放控制器交互的用户空间程序。我使用C ++编程,该程序旨在在Linux上运行。在研究libusb手册时,我遇到了void libusb_exit ( struct libusb_context * ctx )
函数。
说明says:
取消初始化libusb。
应在关闭所有打开的设备之后和之前调用 申请终止。
手册没有解释为什么需要它。我对终止已经初始化并使用libusb而不调用libusb_exit()
的程序的后果感到好奇。如果由于某些原因我的程序在终止之前无法调用libusb_exit()
,有人可以解释可能会发生什么坏事吗?它会导致系统资源泄漏吗?
答案 0 :(得分:3)
这涉及上下文。
只要您拥有单个用户应用程序,通常最终会使用默认上下文。每当用户的会话被销毁时,那个人就会死亡,这可能是你的申请被关闭的时候
另请注意,如果您的应用程序崩溃,请不要仅仅因为没有调用libusb_exit
而泄漏(即使可能发生泄漏,泄漏的内存也会立即释放)在崩溃之后,所以我不会关心崩溃本身的原因。
只要您有多个会话,就会出现问题
有关详细信息,请参阅here和here
如果你在这种情况下调用libusb_exit
失败并且从你的应用程序的角度来看会话处于发布的状态,你肯定会泄漏内存,因为上下文赢了# 39;实际上被libusb摧毁了。实际上,在这种情况下,软件不会被关闭,但该内存仍在使用中且无法再访问,因为您没有调用libusb_exit
来释放它。
这就是为什么文档建议每次要破坏上下文时调用libusb_exit
的原因,无论是否为默认上下文。