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

c – 不调用libusb_exit()的后果是什么,第1张

概述我正在编写一个与USB视频播放控制器交互的用户空间程序.我在C编程,该程序旨在在 Linux上运行.在研究libusb手册时,我遇到了void libusb_exit(struct libusb_context * ctx)函数. 描述says: Deinitialize libusb. Should be called after closing all open devices and bef 我正在编写一个与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(好吧,即使可能发生泄漏,泄漏的内存将在崩溃后立即释放,所以我不会关心它关于崩溃本身的原因).

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

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

总结

以上是内存溢出为你收集整理的c – 不调用libusb_exit()的后果是什么全部内容,希望文章能够帮你解决c – 不调用libusb_exit()的后果是什么所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存