Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::filesy...::space_info(3) C++ Standard Libarystd::filesy...::space_info(3)

NAME
       std::filesystem::space_info - std::filesystem::space_info

Synopsis
	  Defined in header <filesystem>
	  struct space_info {

	      std::uintmax_t capacity;
	      std::uintmax_t free;	  (since C++17)
	      std::uintmax_t available;

	  };

	  Represents  the  filesystem  information  as	determined by filesys-
       tem::space.

Member objects
	  capacity  total size of the filesystem, in bytes
		    (public member object)
	  free	    free space on the filesystem, in bytes
		    (public member object)
		    free space available to a non-privileged process  (may  be
       equal or	less
	  available than free)
		    (public member object)

Non-member functions
	  operator== compares two space_infos
	  (C++20)    (function)

       operator==(std::filesystem::space_info)

	  friend  bool	operator==(  const  space_info&, const space_info& ) =
       (since C++20)
	  default;

	  Checks if capacity, free and available of both arguments  are	 equal
       respectively.

	  This	function  is  not visible to ordinary unqualified or qualified
       lookup, and can
	  only	be  found  by  argument-dependent  lookup  when	 std::filesys-
       tem::space_info is an
	  associated class of the arguments.

	  The != operator is synthesized from operator==.

Example
       // Run this code

	#include <cstdint>
	#include <filesystem>
	#include <iostream>

	std::uintmax_t	disk_usage_percent(const  std::filesystem::space_info&
       si,
					  bool is_privileged = false) noexcept
	{
	    if (constexpr std::uintmax_t X(-1);
		si.capacity == 0 || si.free == 0 || si.available == 0 ||
		si.capacity == X || si.free == X || si.available == X
	    )
		return 100;

	    std::uintmax_t unused_space	= si.free, capacity = si.capacity;
	    if (!is_privileged)
	    {
		const  std::uintmax_t  privileged_only_space   =   si.free   -
       si.available;
		unused_space -=	privileged_only_space;
		capacity -= privileged_only_space;
	    }
	    const std::uintmax_t used_space{capacity - unused_space};
	    return 100 * used_space / capacity;
	}

	void print_disk_space_info(auto	const& dirs, int width = 14)
	{
	    (std::cout << std::left).imbue(std::locale("en_US.UTF-8"));

	    for	 (const	 auto  s  :  {"Capacity", "Free", "Available", "Use%",
       "Dir"})
		std::cout << " " << std::setw(width) <<	s << ' ';

	    for	(std::cout << '\n'; auto const&	dir : dirs)
	    {
		std::error_code	ec;
		const	std::filesystem::space_info   si    =	 std::filesys-
       tem::space(dir, ec);
		for  (auto  x  : {si.capacity, si.free,	si.available, disk_us-
       age_percent(si)})
		    std::cout	<<   "	 "   <<	  std::setw(width)   <<	  sta-
       tic_cast<std::intmax_t>(x) << ' ';
		std::cout << " " << dir	<< '\n';
	    }
	}

	int main()
	{
	    const   auto   dirs	 =  {"/dev/null",  "/tmp",  "/home",  "/proc",
       "/null"};
	    print_disk_space_info(dirs);
	}

Possible output:
	 Capacity	 Free		 Available	 Use%		 Dir
	     84,417,331,200	  42,732,986,368       40,156,028,928	    50
       /dev/null
	 84,417,331,200	 42,732,986,368	 40,156,028,928	 50		 /tmp
	 -1		 -1		 -1		 100		 /home
	 0		 0		 0		 100		 /proc
	 -1		 -1		 -1		 100		 /null

See also
	  space	  determines available free space on the file system
	  (C++17) (function)

http://cppreference.com		  2024.06.10	 std::filesy...::space_info(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::filesystem::space_info&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help