Библиотека для запроса установленных (Debian) пакетов в C? - PullRequest
1 голос
/ 07 ноября 2010

Мне нужно проверить, установлены ли определенные пакеты Debian в системе в моей C-программе. Я мог бы использовать сценарии внешней оболочки, которые применяют магию к выводу apt-cache с помощью system (), но он выглядит немного не элегантным и хакерским, а также тот факт, что он не будет работать, если установленный язык пользователя отличается. Есть ли библиотека C, к которой я могу подключиться для запроса установки пакетов?

1 Ответ

2 голосов
/ 07 ноября 2010

Я не думаю, что вы найдете поставляемую библиотеку, которая соответствует вашим критериям, однако программа 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), пожалуйста, поместите его где-нибудь, чтобы другие могли его найти.У вас есть постоянная потребность, которую разделяют многие люди.

...