apt-get install <package> équivalent à l'aide de la bibliothèque apt-pkg C ++

9

Je construis une petite application QT (C ++) où je demande à l'utilisateur le logiciel qu'il souhaite installer. Une fois qu'il a sélectionné certains packages a, b, c dans la liste, tout ce que je dois faire est d'exécuter

sudo apt-get install a b c

Une façon de procéder consiste à utiliser Qprocess ou System et à exécuter cette commande directement à partir de C ++. Mais je pensais que ce serait un hack et je voulais le faire en utilisant la bibliothèque C ++ apt-pkg. Mais malheureusement, la documentation est très rare pour cette bibliothèque :( J'ai vu les codes source de certains logiciels similaires - Mise à jour logicielle (apt-watch) etc. et je l'ai trouvé trop complexe. Juste pour exécuter la commande ci-dessus, il y a beaucoup de code - Initialisation de pkgCacheFile, PkgIterator , pkgAcqArchive.

Dois-je faire tout cela pour exécuter cette commande simple? N'y a-t-il pas une fonction directe qui prend le nom du logiciel comme argument et l'installe? Où puis-je obtenir un exemple de code de travail pour le même?

Mac
la source
1
Je jure que libQapt est ce que vous recherchez, mais le manque de documentation pour vérifier cela est décourageant. La description correspond "pour faciliter le développement des gestionnaires de paquets écrits en Qt et C ++"
Braiam
Si j'étais à votre place, je demanderais de l'aide ici: programmers.stackexchange.com
Elder Geek
Ce problème est-il résolu?
Utilisateur enregistré le

Réponses:

2

Je voudrais simplement utiliser le système:

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.

Ce n'est pas un hack d'utiliser une solution simple.

David Cullen
la source
0

La réponse est libapt-pkg. Il s'agit d'une bibliothèque écrite en C, ce qui la rend également accessible à partir du code C ++.

Installez les packages libapt-pkg-devet libapt-pkg-docrespectivement pour la bibliothèque et sa documentation.

Juliano ENS
la source