Я не думаю, что вы найдете поставляемую библиотеку, которая соответствует вашим критериям, однако программа dpkg
внутренне выполняет именно то, что вы описываете, и не связывается с библиотеками C ++ (или libstdc ++ вообще):
tpost@tpost-desktop:~$ 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), пожалуйста, поместите его где-нибудь, чтобы другие могли его найти.У вас есть постоянная потребность, которую разделяют многие люди.