AFIO  v2.00 late alpha
afio_v2_xxx::stat_t Struct Reference

Metadata about a directory entry. More...

#include "stat.hpp"

Classes

struct  want_base
 Used to indicate what metadata should be filled in. More...
 

Public Types

using want = quickcpplib::_xxx ::bitfield::bitfield< want_base >
 

Public Member Functions

 stat_t ()=default
 Constructs a UNINITIALIZED instance i.e. full of random garbage.
 
constexpr stat_t (std::nullptr_t) noexcept
 Constructs a zeroed instance.
 
result< size_t > fill (const handle &h, want wanted=want::all) noexcept
 Fills in the structure with metadata, returning number of items filled in.
 

Public Attributes

uint64_t st_dev {}
 
uint64_t st_ino {}
 
filesystem::file_type st_type
 
stil1z::filesystem::perms st_perms
 
int16_t st_nlink {}
 
int16_t st_uid {}
 
int16_t st_gid {}
 
dev_t st_rdev {}
 
std::chrono::system_clock::time_point st_atim
 
std::chrono::system_clock::time_point st_mtim
 
std::chrono::system_clock::time_point st_ctim
 
handle::extent_type st_size {}
 
handle::extent_type st_allocated {}
 
handle::extent_type st_blocks {}
 
uint16_t st_blksize {}
 
uint32_t st_flags {}
 
uint32_t st_gen {}
 
std::chrono::system_clock::time_point st_birthtim
 
unsigned st_sparse: 1
 
unsigned st_compressed: 1
 
unsigned st_reparse_point: 1
 

Detailed Description

Metadata about a directory entry.

This structure looks somewhat like a struct stat, and indeed it was derived from BSD's struct stat. However there are a number of changes to better interoperate with modern practice, specifically:

  • inode value containers are forced to 64 bits.
  • Timestamps use C++11's std::chrono::system_clock::time_point or Boost equivalent. The resolution of these may or may not equal what a struct timespec can do depending on your STL.
  • The type of a file, which is available on Windows and on POSIX without needing an additional syscall, is provided by st_type which is one of the values from filesystem::file_type.
  • As type is now separate from permissions, there is no longer a st_mode, instead being a st_perms which is solely the permissions bits. If you want to test permission bits in st_perms but don't want to include platform specific headers, note that filesystem::perms contains definitions of the POSIX permissions flags.
  • The st_sparse and st_compressed flags indicate if your file is sparse and/or compressed, or if the directory will compress newly created files by default. Note that on POSIX, a file is sparse if and only if st_allocated < st_size which can include compressed files if that filing system is mounted with compression enabled (e.g. ZFS with ZLE compression which elides runs of zeros).
  • The st_reparse_point is a Windows only flag and is never set on POSIX, even on a NTFS volume.

Member Data Documentation

◆ st_allocated

handle::extent_type afio_v2_xxx::stat_t::st_allocated {}

bytes allocated for file (Windows, POSIX)

◆ st_atim

std::chrono::system_clock::time_point afio_v2_xxx::stat_t::st_atim

time of last access (Windows, POSIX)

◆ st_birthtim

std::chrono::system_clock::time_point afio_v2_xxx::stat_t::st_birthtim

time of file creation (Windows, FreeBSD, OS X, zero otherwise)

◆ st_blksize

uint16_t afio_v2_xxx::stat_t::st_blksize {}

block size used by this device (Windows, POSIX)

◆ st_blocks

handle::extent_type afio_v2_xxx::stat_t::st_blocks {}

number of blocks allocated (Windows, POSIX)

◆ st_compressed

unsigned afio_v2_xxx::stat_t::st_compressed

if this file is compressed, or this directory capable of compressed files (Windows)

◆ st_ctim

std::chrono::system_clock::time_point afio_v2_xxx::stat_t::st_ctim

time of last status change (Windows, POSIX)

◆ st_dev

uint64_t afio_v2_xxx::stat_t::st_dev {}

inode of device containing file (POSIX only)

◆ st_flags

uint32_t afio_v2_xxx::stat_t::st_flags {}

user defined flags for file (FreeBSD, OS X, zero otherwise)

◆ st_gen

uint32_t afio_v2_xxx::stat_t::st_gen {}

file generation number (FreeBSD, OS X, zero otherwise)

◆ st_gid

int16_t afio_v2_xxx::stat_t::st_gid {}

group ID of the file (POSIX only)

◆ st_ino

uint64_t afio_v2_xxx::stat_t::st_ino {}

inode of file (Windows, POSIX)

◆ st_mtim

std::chrono::system_clock::time_point afio_v2_xxx::stat_t::st_mtim

time of last data modification (Windows, POSIX)

◆ st_nlink

int16_t afio_v2_xxx::stat_t::st_nlink {}

number of hard links (Windows, POSIX)

◆ st_perms

stil1z::filesystem::perms afio_v2_xxx::stat_t::st_perms

uint16_t bitfield perms of file (POSIX only)

◆ st_rdev

dev_t afio_v2_xxx::stat_t::st_rdev {}

id of file if special (POSIX only)

◆ st_reparse_point

unsigned afio_v2_xxx::stat_t::st_reparse_point

if this file or directory is a reparse point (Windows)

◆ st_size

handle::extent_type afio_v2_xxx::stat_t::st_size {}

file size, in bytes (Windows, POSIX)

◆ st_sparse

unsigned afio_v2_xxx::stat_t::st_sparse

if this file is sparse, or this directory capable of sparse files (Windows, POSIX)

◆ st_type

filesystem::file_type afio_v2_xxx::stat_t::st_type

type of file (Windows, POSIX)

◆ st_uid

int16_t afio_v2_xxx::stat_t::st_uid {}

user ID of the file (POSIX only)


The documentation for this struct was generated from the following file: