GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich programmgesteuert den freien Speicherplatz für ein Verzeichnis in Linux

Mit C++17

Sie können std::filesystem::space verwenden :

#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';
}

Sie können boost::filesystem:

verwenden
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);

Beispiel:

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

Rückgabe:Ein Objekt vom Typ space_info. Der Wert des space_info-Objekts wird so bestimmt, als würde man POSIX statvfs() verwenden, um eine POSIX-Struktur statvfs zu erhalten, und dann seine f_blocks-, f_bfree- und f_bavail-Mitglieder mit seinem f_frsize-Mitglied multiplizieren und die Ergebnisse der Kapazität, frei und zuweisen verfügbare Mitglieder bzw. Alle Mitglieder, für die der Wert nicht bestimmt werden kann, werden auf -1 gesetzt.


überprüfen Sie man statvfs(2)

Ich glaube, Sie können "freien Speicherplatz" als f_bsize * f_bfree berechnen .

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. Verwenden Sie df, um den freien Speicherplatz unter Linux zu überprüfen

  2. So erhalten Sie die Verzeichnisgröße in Linux

  3. Wie leert man den CPU-Cache für eine Region des Adressraums in Linux?

  4. Wie lösche ich freien Speicherplatz in Linux?

  5. Wie erhalte ich die Anzahl der physischen Festplatten in Linux?

So erhalten Sie die Größe eines Verzeichnisses in Linux

So überprüfen Sie den freien Speicherplatz unter Linux [Terminal- und GUI-Methoden]

So installieren Sie Fast Disk Usage Analyzer [Gdu] für Linux

So überprüfen Sie den freien Speicherplatz unter Linux

Wie kann festgestellt werden, was auf einem Linux-Server den meisten Speicherplatz belegt?

So erhalten Sie die obersten unmittelbaren Unterordner des Ordners „/“, die unter Linux viel Speicherplatz verbrauchen