C ++ apt-pkgライブラリを使用したapt-get install <package>と同等


9

小さなQT(C ++)アプリケーションを構築しています。インストールするソフトウェアをユーザーに尋ねます。彼がリストからいくつかのパッケージa、b、cを選択したら、私がしなければならないすべては実行されます

sudo apt-get install a b c

これを行う1つの方法は、QprocessまたはSystemを使用して、このコマンドをC ++から直接実行することです。しかし、これはハックになると思い、apt-pkg C ++ライブラリを使用して実行したいと考えました。しかし、残念なことに、このライブラリのドキュメントは非常に希薄です:(私はいくつかの類似したソフトウェアのソースコードを見ました-ソフトウェアアップデーター(apt-watch)など)それが複雑すぎることに気付きました。 、pkgAcqArchive。

この簡単なコマンドを実行するには、これらすべてを行う必要がありますか?ソフトウェア名を引数にしてインストールするダイレクト機能はないのですか?どこで同じコードのサンプルを入手できますか?


1
libQaptはあなたが探しているものだと私は誓いますが、これを検証するためのドキュメントの欠如は悲惨です。説明は「QtとC ++で書かれたパッケージマネージャーの開発を容易にするため」に当てはまります
Braiam

私があなたの立場にいるなら、私はここで助けを求めます:programmers.stackexchange.com
Elder Geek

この問題は解決されましたか?
登録ユーザー

回答:


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.

単純なソリューションを使用するのはハックではありません。


0

答えはlibapt-pkgです。これはCで記述されたライブラリで、C ++コードからもアクセスできます。

パッケージlibapt-pkg-devをインストールし、libapt-pkg-docそれぞれライブラリとそのドキュメントをインストールします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.