使用C ++ apt-pkg库进行apt-get install <package>等效


9

我正在构建一个小型QT(C ++)应用程序,在此我向用户询问他要安装的软件。一旦他从列表中选择了一些软件包a,b,c,我要做的就是运行

sudo apt-get install a b c

一种方法是使用Qprocess或System并直接从C ++运行此命令。但是我认为这将是一个hack,想使用apt-pkg C ++库来完成。但是遗憾的是该库的文档非常稀疏:(我看到了一些类似软件的源代码-软件更新程序(apt-watch)等,发现它太复杂了。只是要在命令上方运行,它就有很多代码-初始化pkgCacheFile,PkgIterator ,pkgAcqArchive。

我是否必须执行所有这些操作才能运行此简单命令?是否没有直接函数将软件名称作为参数并安装它?在哪里可以获得相同的示例工作代码?


1
我发誓libQapt是您要寻找的东西,但是缺乏证明这一点的文档令人沮丧。该描述适合“缓解用Qt和C ++编写的程序包管理器的开发”
Braiam 2014年

如果我不满意,可以在这里寻求帮助:programmers.stackexchange.com
极客老人2014年

这个问题解决了吗?
注册用户

Answers:


2

我只会使用系统:

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.

使用简单的解决方案并不是一个hack。


0

答案是libapt-pkg。这是一个用C编写的库,因此也可以从C ++代码进行访问。

安装软件包,libapt-pkg-devlibapt-pkg-doc分别安装库及其文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.