我需要检查某些Debian软件包是否安装在我的C程序中的某个系统上。我可以使用外部shell脚本,它使用system()来执行apt-cache输出的grep魔术,但它看起来有点不雅和骇人听闻,以及如果用户安装的语言不同,它将不起作用。有没有一个C库我可以挂钩查询软件包安装?用于在C中查询已安装(Debian)软件包的库?
1
A
回答
2
我不认为你会找到符合条件的附带库,但dpkg
程序在内部完全按照你所描述的内容进行,并且不会链接到C++库(或libstdC++):
[email protected]:~$ ldd -v /usr/bin/dpkg
linux-gate.so.1 => (0x00f33000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00dfb000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x0077a000)
/lib/ld-linux.so.2 (0x006a6000)
如果apt-get source dpkg
,我想你会发现,你在lib/dpkg
需要的源代码树中的代码,特别是database.c
和parse.c
。
诀窍当然是从中提取你需要的东西。另外,GPL可能会或可能不会同意你的项目,但至少它是一个学习的实施。
例如,dpkg
读取数据库的例子可以通过dpkg -l | grep ii
查看,以查看所有已安装的软件包。这听起来像你只需要将这些信息放入一个优雅的数组或列表中,我想你会在dpkg
的范围内找到有关如何做到这一点的灵感。
如果你最终编写自己的库(或封装在dpkg中的位),请把它放在其他人可以找到它的地方。你需要的是许多人共同分享的经常性需求。
相关问题
- 1. 在debian上安装实验软件包
- 2. 使SetupTools/easy_install知道已安装的Debian软件包?
- 3. 已安装的Debian软件包列表 - 但有一个转折
- 4. 安装Debian软件包更改配置
- 5. 从debian/rules安装软件包
- 6. 取消预安装脚本中的debian软件包安装
- 7. 如果C:\ Python27已安装在C:\ path \ Anaconda3 \ ...中,如何安装软件包(或使用现有软件包)?
- 8. 将Debian软件包分发到Debian软件包并安装其他东西
- 9. 安装软件包安装是否也更新已安装的软件包
- 10. debian软件包装教程
- 11. 检查已安装的软件包,如果未找到安装
- 12. 在Go中检查已安装的软件包
- 13. 在Spark中查找已安装的软件包
- 14. 安装debian软件包以执行安装操作
- 15. 用ruby在windows上查询已安装的软件
- 16. R,找到已安装的软件包
- 17. 在安装Debian软件包时禁用提示
- 18. 如何在debian whitout sudo权限中安装软件包?
- 19. 用于安装.NET的WiX软件包
- 20. 在安装时安装软件包所需的R软件包
- 21. 在运行install.packages()前检查已安装的软件包()
- 22. 在linux上查找已安装的软件包
- 23. 已安装Autoload Composer软件包
- 24. Debian软件包不包含文件;在生成过程中运行安装
- 25. debian/postinst如何知道正在安装哪个软件包?
- 26. 如何在脱机Debian机器上安装R软件包?
- 27. 如何在高山上安装Debian软件包
- 28. 如何在Debian上安装python-affinity软件包?
- 29. 如何在Debian上安装软件包而无需下载?
- 30. 如何在Debian系统上安装Debian软件包时读取输入信息
请参阅http://stackoverflow.com/q/341520/129570。 – 2010-11-07 01:28:41
所有答案,包括apt-cache自己的源代码和libept都是C++接口。 – 2010-11-07 01:35:35
用户的语言如何干扰dpkg -l和grep? – 2016-01-23 01:59:25