GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara saya secara terprogram mendapatkan ruang disk kosong untuk direktori di Linux

Dengan C++17

Anda dapat menggunakan 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';
}

Anda dapat menggunakan 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);

Contoh:

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

Pengembalian:Objek bertipe space_info. Nilai objek space_info ditentukan seolah-olah dengan menggunakan POSIX statvfs() untuk mendapatkan status struct POSIX, dan kemudian mengalikan anggota f_blocks, f_bfree, dan f_bavail dengan anggota f_frsize, dan menugaskan hasilnya ke kapasitas, gratis, dan anggota yang tersedia masing-masing. Setiap anggota yang nilainya tidak dapat ditentukan harus disetel ke -1.


centang man statvfs(2)

Saya yakin Anda dapat menghitung 'ruang kosong' sebagai 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. Gunakan df untuk memeriksa ruang disk kosong di Linux

  2. Cara mendapatkan ukuran direktori di Linux

  3. Mengkompilasi kernel Linux, berapa ukuran yang dibutuhkan?

  1. Linux – Bagaimana Cara Menampilkan Sar Untuk Hari Sebelumnya?

  2. Bagaimana Mendapatkan Red Hat Enterprise Linux Secara Gratis?

  3. Bagaimana cara mendapatkan jumlah disk fisik di Linux?

  1. Periksa ruang disk kosong di Linux dengan ncdu

  2. Bagaimana cara menyiram cache CPU untuk wilayah ruang alamat di Linux?

  3. Bagaimana cara menghapus ruang disk kosong di Linux?