GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso ottenere a livello di codice lo spazio libero su disco per una directory in Linux

Con C++17

Puoi usare std::filesystem::space :

#include <iostream>  // only needed for screen output

#include <filesystem>
namespace fs = std::filesystem;

int main()
{
    fs::space_info tmp = fs::space("/tmp");

    std::cout << "Free space: " << tmp.free << '\n'
              << "Available space: " << tmp.available << '\n';
}

Puoi usare boost::filesystem:

struct space_info  // returned by space function
{
    uintmax_t capacity;
    uintmax_t free; 
    uintmax_t available; // free space available to a non-privileged process
};

space_info   space(const path& p);
space_info   space(const path& p, system::error_code& ec);

Esempio:

#include <boost/filesystem.hpp>
using namespace boost::filesystem;
space_info si = space(".");
cout << si.available << endl;

Restituisce:un oggetto di tipo space_info. Il valore dell'oggetto space_info viene determinato come se si utilizzasse POSIX statvfs() per ottenere una struttura POSIX statvfs, quindi moltiplicando i suoi membri f_blocks, f_bfree e f_bavail per il suo membro f_frsize e assegnando i risultati a capacity, free e membri disponibili rispettivamente. Tutti i membri per i quali non è possibile determinare il valore devono essere impostati su -1.


seleziona man statvfs(2)

Credo che tu possa calcolare lo "spazio libero" come f_bsize * f_bfree .

NAME
       statvfs, fstatvfs - get file system statistics

SYNOPSIS
       #include <sys/statvfs.h>

       int statvfs(const char *path, struct statvfs *buf);
       int fstatvfs(int fd, struct statvfs *buf);

DESCRIPTION
       The function statvfs() returns information about a mounted file system.
       path is the pathname of any file within the mounted file  system.   buf
       is a pointer to a statvfs structure defined approximately as follows:

           struct statvfs {
               unsigned long  f_bsize;    /* file system block size */
               unsigned long  f_frsize;   /* fragment size */
               fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
               fsblkcnt_t     f_bfree;    /* # free blocks */
               fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
               fsfilcnt_t     f_files;    /* # inodes */
               fsfilcnt_t     f_ffree;    /* # free inodes */
               fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
               unsigned long  f_fsid;     /* file system ID */
               unsigned long  f_flag;     /* mount flags */
               unsigned long  f_namemax;  /* maximum filename length */
           };

Linux
  1. Usa df per controllare lo spazio libero su disco su Linux

  2. Come ottenere la dimensione della directory in Linux

  3. Come svuotare la cache della CPU per una regione dello spazio degli indirizzi in Linux?

  4. Come cancellare lo spazio libero su disco in Linux?

  5. Compilando il kernel Linux, quanta dimensione è necessaria?

Come ottenere la dimensione di una directory in Linux

Come controllare lo spazio libero su disco su Linux [Metodi terminale e GUI]

Come installare Fast Disk Usage Analyzer [Gdu] per Linux

Come controllare lo spazio libero su disco su Linux

Come determinare cosa sta utilizzando più spazio su disco su un server Linux?

Come ottenere le migliori sottocartelle immediate della cartella '/' che consumano un enorme spazio su disco in Linux