apt-get install <package> эквивалент с использованием библиотеки C ++ apt-pkg

9

Я создаю небольшое приложение QT (C ++), где я спрашиваю пользователя, какое программное обеспечение он хочет установить. Как только он выбрал несколько пакетов a, b, c из списка, все, что мне нужно сделать, это запустить

sudo apt-get install a b c

Один из способов сделать это - использовать Qprocess или System и запустить эту команду непосредственно из C ++. Но я подумал, что это будет взломом, и хотел использовать библиотеку apt-pkg C ++. Но, к сожалению, документации для этой библиотеки очень мало :( Я видел исходные коды некоторых подобных программ - Software Updater (apt-watch) и т. Д. И нашел его слишком сложным. Просто чтобы выполнить команду выше, в ней много кода - Инициализация pkgCacheFile, PkgIterator , pkgAcqArchive.

Нужно ли делать все это, чтобы запустить эту простую команду? Нет ли прямой функции, которая принимает имя программного обеспечения в качестве аргумента и устанавливает его? Где я могу получить образец рабочего кода для того же?

макинтош
источник
1
Клянусь, libQapt - это то, что вы ищете, но отсутствие документации, подтверждающей это, обескураживает. Описание подходит для «облегчения разработки менеджеров пакетов, написанных на Qt и C ++»
Braiam
Если бы я был на вашем месте, я бы обратился за помощью сюда: programmers.stackexchange.com
Elder Geek
Эта проблема решается?
Зарегистрированный пользователь

Ответы:

2

Я бы просто использовал систему:

SYSTEM(3)            Linux Programmer's Manual           SYSTEM(3)

NAME
       system - execute a shell command

SYNOPSIS
       #include <stdlib.h>

       int system(const char *command);

DESCRIPTION
       system() executes a command specified in command by calling
       /bin/sh -c command, and returns after the command has  been
       completed.   During  execution of the command, SIGCHLD will
       be blocked, and SIGINT and SIGQUIT will be ignored.

RETURN VALUE
       The value returned is -1 on error (e.g.   fork(2)  failed),
       and  the return status of the command otherwise.  This lat-
       ter return status is in the format  specified  in  wait(2).
       Thus, the exit code of the command will be WEXITSTATUS(sta-
       tus).  In case /bin/sh could not be executed, the exit sta-
       tus will be that of a command that does exit(127).

       If  the  value of command is NULL, system() returns nonzero
       if the shell is available, and zero if not.

       system() does not affect the wait status of any other chil-
       dren.

Это не хак, чтобы использовать простое решение.

Дэвид Каллен
источник
0

Ответ есть libapt-pkg. Это библиотека, написанная на C, что делает ее также доступной из кода C ++.

Установите пакеты libapt-pkg-devи libapt-pkg-docсоответственно для библиотеки и ее документации.

Джулиано ЭНС
источник