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

9

Estoy creando una pequeña aplicación QT (C ++) donde le pregunto al usuario el software que desea instalar. Una vez que seleccionó algunos paquetes a, b, c de la lista, todo lo que tengo que hacer es ejecutar

sudo apt-get install a b c

Una forma de hacerlo es usar Qprocess o System y ejecutar este comando directamente desde C ++. Pero pensé que esto sería un hack y quería hacerlo usando la biblioteca apt-pkg C ++. Pero lamentablemente la documentación es muy escasa para esta biblioteca :( Vi códigos fuente de algunos softwares similares - Actualizador de software (apt-watch) etc. y lo encontré demasiado complejo. Solo para ejecutar el comando anterior, tiene mucho código - Inicializando pkgCacheFile, PkgIterator , pkgAcqArchive.

¿Tengo que hacer todo esto para ejecutar este comando simple? ¿No hay una función directa que tome el nombre del software como argumento y lo instale? ¿Dónde puedo obtener un código de trabajo de muestra para el mismo?

Mac
fuente
1
Juro que libQapt es lo que buscas, pero la falta de documentación para verificar esto es desconcertante. La descripción encaja "para facilitar el desarrollo de gestores de paquetes escritos en Qt y C ++"
Braiam,
Si estuviera en tu lugar, buscaría ayuda aquí: programmers.stackexchange.com
Elder Geek
¿Se ha resuelto este problema?
Usuario registrado

Respuestas:

2

Solo usaría el 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.

No es un truco usar una solución simple.

David Cullen
fuente
0

La respuesta es libapt-pkg. Es una biblioteca escrita en C, que también la hace accesible desde el código C ++.

Instale los paquetes libapt-pkg-devy libapt-pkg-docrespectivamente para la biblioteca y su documentación.

Juliano ENS
fuente