apt-get install <Paket> entspricht der C ++ - apt-pkg-Bibliothek

9

Ich erstelle eine kleine QT (C ++) - Anwendung, in der ich den Benutzer nach der Software frage, die er installieren möchte. Nachdem er einige Pakete a, b, c aus der Liste ausgewählt hat, muss ich sie nur noch ausführen

sudo apt-get install a b c

Eine Möglichkeit, dies zu tun, besteht darin, Qprocess oder System zu verwenden und diesen Befehl direkt in C ++ auszuführen. Aber ich dachte, dies wäre ein Hack und wollte die apt-pkg C ++ - Bibliothek verwenden. Leider ist die Dokumentation für diese Bibliothek sehr spärlich :( Ich habe Quellcodes ähnlicher Software gesehen - Software-Updater (apt-watch) usw. und fand sie zu komplex. Nur um den obigen Befehl auszuführen, enthält sie viel Code - Initialisierung von pkgCacheFile, PkgIterator , pkgAcqArchive.

Muss ich das alles tun, um diesen einfachen Befehl auszuführen? Gibt es nicht eine direkte Funktion, die den Namen der Software als Argument verwendet und installiert? Wo kann ich einen Beispielarbeitscode dafür bekommen?

Mac
quelle
1
Ich schwöre, libQapt ist das, wonach Sie suchen, aber der Mangel an Dokumentation, um dies zu überprüfen, ist entmutigend. Die Beschreibung passt "um die Entwicklung von Paketmanagern zu erleichtern, die in Qt und C ++ geschrieben sind"
Braiam
Wenn ich in Ihren Schuhen stecke, würde ich hier Hilfe suchen: programmers.stackexchange.com
Elder Geek
Wurde dieses Problem gelöst?
Registrierter Benutzer

Antworten:

2

Ich würde nur System verwenden:

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.

Es ist kein Hack, eine einfache Lösung zu verwenden.

David Cullen
quelle
0

Die Antwort ist libapt-pkg. Es ist eine in C geschriebene Bibliothek, die auch über C ++ - Code zugänglich ist.

Installieren Sie die Pakete libapt-pkg-devund die libapt-pkg-docjeweils für die Bibliothek und deren Dokumentation.

Juliano ENS
quelle