apt-get install <pack> tương đương bằng thư viện C ++ apt-pkg


9

Tôi đang xây dựng một ứng dụng QT (C ++) nhỏ nơi tôi hỏi người dùng phần mềm anh ta muốn cài đặt. Khi anh ấy chọn một số gói a, b, c từ danh sách, tất cả những gì tôi phải làm là chạy

sudo apt-get install a b c

Một cách để làm điều này là sử dụng Q Process hoặc System và chạy lệnh này trực tiếp từ C ++. Nhưng tôi nghĩ đây sẽ là một bản hack và muốn sử dụng thư viện C ++ của apt-pkg. Nhưng đáng buồn là tài liệu rất thưa thớt cho thư viện này :( Tôi thấy mã nguồn của một số phần mềm tương tự - Trình cập nhật phần mềm (apt-watch), v.v. và thấy nó quá phức tạp. Chỉ cần chạy lệnh trên, nó có rất nhiều mã - Khởi tạo pkgCacheFile, PkgIterator , pkgAcqArchive.

Tôi có phải làm tất cả điều này để chạy lệnh đơn giản này không? Không có chức năng trực tiếp lấy tên phần mềm làm đối số và cài đặt nó sao? Tôi có thể lấy mã làm việc cho cùng một mẫu ở đâu?


1
Tôi thề libQapt là những gì bạn tìm kiếm, nhưng thiếu tài liệu để xác minh điều này là mất phương hướng. Mô tả phù hợp "để giảm bớt sự phát triển của các trình quản lý gói được viết bằng Qt và C ++"
Braiam

Nếu tôi ở trong đôi giày của bạn, tôi sẽ tìm kiếm sự giúp đỡ ở đây: lập trình
viên.stackexchange.com

Vấn đề này đã được giải quyết chưa?
Người dùng đã đăng ký

Câu trả lời:


2

Tôi sẽ chỉ sử dụng hệ thống:

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.

Nó không phải là một hack để sử dụng một giải pháp đơn giản.


0

Câu trả lời là libapt-pkg. Nó là một thư viện được viết bằng C, làm cho nó cũng có thể truy cập được từ mã C ++.

Cài đặt các gói libapt-pkg-devlibapt-pkg-doctương ứng cho thư viện và tài liệu của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.