9

I am building a small QT (C++) application where I ask user the software he want to install. Once he selected some packages a, b, c from the list all I have to do is run

sudo apt-get install a b c

One way of doing this is using Qprocess or System and run this command directly from C++. But I thought this would be a hack and wanted to do using apt-pkg C++ library. But sadly documentation is very sparse for this library :( I saw source codes of some similar softwares - Software updater ( apt-watch ) etc and found it too complex. Just to run above command, it has lot of code - Initializing pkgCacheFile, PkgIterator, pkgAcqArchive.

Do I have to do all this to run this simple command ? Isn't there a direct function which takes software name as argument and install it ? Where Can I get a sample working code for the same?

3
  • 1
    I swear libQapt is what you look for, but the lack of documentation to verify this is discoraging. The description fits "to ease the development of package managers written in Qt and C++"
    – Braiam
    May 1 '14 at 20:51
  • If I were in your shoes I'd seek help here: programmers.stackexchange.com
    – Elder Geek
    May 7 '14 at 20:40
  • Has this problem being solved? Jul 17 '14 at 14:33
2

I would just use system:

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.

It is not a hack to use a simple solution.

0

The answer is libapt-pkg. It is a library written in C, which makes it also accessible from C++ code.

Install the packages libapt-pkg-dev and libapt-pkg-doc respectively for the library and its documentation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.