Code Monkey home page Code Monkey logo

kpmcore's Introduction

KPMcore

KPMcore, the KDE Partition Manager core, is a library for examining and modifying partitions, disk devices, and filesystems on a Linux system. It provides a unified programming interface over top of (external) system-manipulation tools.

KPMcore is a library for examining and manipulating all facets of storage devices on a system:

  • raw disk devices
  • partition tables on a device
  • filesystems within a partition

There are multiple backends so that KPMcore can support different operating systems, although the only functional backend is the one for Linux systems:

  • sfdisk backend (Linux)
  • null backend

Using KPMcore

Most of the usage information on KPMcore is included in the API documentation; this section contains only high-level usage information.

Finding KPMcore with CMake

KPMcore supports CMake as (meta-)build system and installs suitable CMake support files. Typical use of of KPMcore in a CMakeLists.txt looks like this:

    find_package( KPMcore 3.2 REQUIRED )
    target_link_libraries( target kpmcore )

There are no imported targets defined for KPMcore.

Initialization

An application must initialize the library and load a suitable backend before using KPMcore functions. By convention, the environment variable KPMCORE_BACKEND names a backend, and typical initialization code will look like this (or use the class KPMCoreInitializer from test/helpers.h):

    #include <backend/corebackendmanager.h>
    #include <QDebug>

    bool initKPMcore()
    {
        static bool inited = false;
        if ( inited ) return true;

        QByteArray env = qgetenv( "KPMCORE_BACKEND" );
        auto backendName = env.isEmpty() ? CoreBackendManager::defaultBackendName() : env;
        if ( !CoreBackendManager::self()->load( backendName ) )
        {
            qWarning() << "Failed to load backend plugin" << backendName;
            return false;
        }
        inited = true;
        return true;
    }

This code uses the environment variable if set, and otherwise falls back to a default backend suitable for the current platform.

Calling KPMcore functions before the library is initialized will result in undefined behavior.

Devices

After the backend is initialized you can scan for available devices. If you only want devices from the loaded backend you can call

    QList<Device*> devices = backend->scanDevices( excludeReadOnly );

where bool option excludeReadOnly specifies whether to exclude read only devices.

KPMcore device scanner

Alternatively, you can use KPMcore device scanner

    #include <core/device.h>
    #include <core/devicescanner.h>
    #include <core/operationstack.h>

    // First create operationStack with another QObject as parent, we will use nullptr here.
    OperationStack *operationStack = new OperationStack(nullptr);
    DeviceScanner *deviceScanner = new DeviceScanner(nullptr, *operationStack);
    deviceScanner->scan(); // use start() for scanning in the background thread
    QList<Device*> devices = operationStack->previewDevices();

Then deviceScanner scans for the devices in a background thread. After scanning is complete DeviceScanner::finished() signal will be emitted. Then the devices can accessed using operationStack->previewDevices().

kpmcore's People

Contributors

stikonas avatar teo avatar tctara avatar cjlcarvalho avatar shubham-100 avatar tsdgeos avatar adriaandegroot avatar gportay avatar kossebau avatar hsitter avatar pali avatar tcanabrava avatar er2off avatar heirecka avatar montel avatar yurchor avatar bvbfan avatar lordtermor avatar bcooksley avatar davidedmundson avatar awilfox avatar neundorf avatar alex1701c avatar ntninja avatar winterz avatar antonio-rojas avatar a-wai avatar lueck-b avatar cmorlok avatar symphorien avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.