Я создаю небольшое приложение на QT (C ++), где я спрашиваю пользователя, какое программное обеспечение он хочет установить. После того, как он выбрал несколько пакетов a, b, c из списка, все, что мне нужно сделать, это запустить
sudo apt-get install a b c
Один из способов сделать это - использовать Qprocess или System и запустить эту команду непосредственно из C ++. Но я подумал, что это будет взломом, и хотел использовать библиотеку apt-pkg C ++. Но, к сожалению, документации для этой библиотеки очень мало :( Я видел исходные коды некоторых подобных программ - Software Updater (apt-watch) и т. Д. И нашел его слишком сложным. Просто чтобы выполнить команду выше, у нее много кода - Инициализация pkgCacheFile, PkgIterator , pkgAcqArchive.
Нужно ли делать все это для запуска этой простой команды? Разве нет прямой функции, которая принимает имя программного обеспечения в качестве аргумента и устанавливает его? Где я могу получить образец рабочего кода для того же самого ?
Я просто использовал бы систему:
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.
Это не взлом для использования простого решения.
Ответ libapt-pkg
. Это - библиотека, записанная в C, который делает его также доступным из кода C++.
Установка пакеты libapt-pkg-dev
и libapt-pkg-doc
соответственно для библиотеки и ее документации.