apt-get install <pakiet> równoważny przy użyciu biblioteki C ++ apt-pkg

9

Buduję małą aplikację QT (C ++), w której pytam użytkownika, jakie oprogramowanie chce zainstalować. Po wybraniu niektórych pakietów a, b, c z listy, wszystko co muszę zrobić, to uruchomić

sudo apt-get install a b c

Jednym ze sposobów na to jest użycie Qprocess lub System i uruchomienie tej komendy bezpośrednio z C ++. Ale myślałem, że to hack i chciałem to zrobić przy użyciu biblioteki C ++ apt-pkg. Niestety dokumentacja dla tej biblioteki jest bardzo rzadka :( Widziałem kody źródłowe niektórych podobnych programów - aktualizator oprogramowania (apt-watch) itp. I uznałem, że jest zbyt skomplikowany. Aby uruchomić powyżej polecenia, ma dużo kodu - Inicjowanie pkgCacheFile, PkgIterator , pkgAcqArchive.

Czy muszę to wszystko zrobić, aby uruchomić to proste polecenie? Czy nie ma bezpośredniej funkcji, która bierze nazwę oprogramowania jako argument i instaluje go? Gdzie mogę uzyskać przykładowy działający kod dla tego samego?

prochowiec
źródło
1
Przysięgam, że libQapt jest tym, czego szukasz, ale brak dokumentacji, która by to zweryfikowała, jest niepokojący. Opis pasuje do „ułatwienia rozwoju menedżerów pakietów napisanych w Qt i C ++”
Braiam
Gdybym był w twoich butach, szukałbym tutaj pomocy: programmers.stackexchange.com
Elder Geek
Czy ten problem został rozwiązany?
Zarejestrowany użytkownik

Odpowiedzi:

2

Chciałbym tylko użyć systemu:

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.

Korzystanie z prostego rozwiązania nie jest hackowaniem.

David Cullen
źródło
0

Odpowiedź jest libapt-pkg. Jest to biblioteka napisana w C, dzięki czemu jest również dostępna z kodu C ++.

Zainstaluj pakiety libapt-pkg-devi libapt-pkg-docodpowiednio dla biblioteki i jej dokumentacji.

Juliano ENS
źródło