apt-get install <package> equivalente usando a biblioteca apt-pkg do C ++

9

Estou construindo um pequeno aplicativo QT (C ++) em que solicito ao usuário o software que ele deseja instalar. Depois que ele selecionou alguns pacotes a, b, c da lista, tudo o que preciso fazer é executar

sudo apt-get install a b c

Uma maneira de fazer isso é usar o Qprocess ou System e executar esse comando diretamente do C ++. Mas eu pensei que isso seria um hack e queria fazer usando a biblioteca C ++ do apt-pkg. Mas infelizmente a documentação é muito escassa para esta biblioteca :( Vi códigos-fonte de alguns softwares semelhantes - Atualizador de software (apt-watch) etc. e achei muito complexo. Apenas para executar o comando acima, ele tem muito código - Inicializando o pkgCacheFile, PkgIterator , pkgAcqArchive.

Eu tenho que fazer tudo isso para executar este comando simples? Não existe uma função direta que pega o nome do software como argumento e o instala? Onde posso obter um exemplo de código de trabalho para o mesmo?

Mac
fonte
11
Eu juro que libQapt é o que você procura, mas a falta de documentação para verificar isso é desanimadora. Os descrição se encaixa "para facilitar o desenvolvimento de gestores de pacotes escritos em Qt e C ++"
Braiam
Se eu estivesse no seu lugar eu procurar ajuda aqui: programmers.stackexchange.com
Elder Geek
Este problema está sendo resolvido?
Usuário Registrado

Respostas:

2

Eu apenas usaria o sistema:

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.

Não é um truque usar uma solução simples.

David Cullen
fonte
0

A resposta é libapt-pkg. É uma biblioteca escrita em C, que também a torna acessível a partir do código C ++.

Instale os pacotes libapt-pkg-deve, libapt-pkg-docrespectivamente, para a biblioteca e sua documentação.

Juliano ENS
fonte