¿Cómo obtener permisos de archivos con la biblioteca de impulso de C ++?

Estoy trabajando en un proyecto para crear una base de datos de los archivos que tengo en el directorio actual. Y uno de los detalles que quiero saber acerca de mis archivos son los permisos de archivos que se establecen con chmod en ubuntu. (solo una nota: también necesitaré la información del grupo y del propietario, como chown, y si pudiera informarme si boost también puede recuperar la información de propiedad, sería genial).

Estoy usando la biblioteca del sistema de archivos boost y he revisado la documentación varias veces, pero no pude encontrar cómo obtener los permisos.

En esta página muestra que hayenum perms que tiene las cadenas de permisos de archivo que no se muestran en mi propio filesystem.hpp. (Y he comprobado que tengo la versión 1.49, también construida desde la fuente solo para estar seguro). Tambiénen la misma página aquí muestra que puede obtener los permisos como:

perms permissions() const noexcept; 
//Returns: The value of
//permissions() specified by the postconditions of the most recent call
//to a constructor, operator=, or permissions(perms) function.

No he podido encontrar la función de permisos ni el lugar donde almacena la lista de permisos.

Este es el código que tengo hasta ahora (que en realidad es de tutoriales de impulso, pero lo modifiqué para que sea recursivo), si pudiera decirme cómo obtener los permisos / propiedades del archivo o sugerir otra biblioteca que no sea impulso, lo agradecería. @

EDIT: he agregado los s.permissions () como ethan_liou sugirió, sin embargo, el resultado no fue el esperado. Aquí está el código actualizado y la salida.

//  filesystem tut4.cpp  ---------------------------------------------------------------//

//  Copyright Beman Dawes 2009

//  Distributed under the Boost Software License, Version 1.0.
//  See http://www.boost.org/LICENSE_1_0.txt

//  Library home page: http://www.boost.org/libs/filesystem

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <boost/filesystem.hpp>
#include <stdio.h> 
using namespace std;
using namespace boost::filesystem;
int read(path p);

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        cout << "Usage: tut4 path\n";
        return 1;
    }

    path p (argv[1]);   // p reads clearer than argv[1] in the following code
    read(p);


    return 0;
}
int read(path p) {
    try
    {
        if (exists(p))    // does p actually exist?
        {
            if (is_symlink(p)) {
                cout << p << " is a link\n";

            }
            else if (is_regular_file(p)) {
                // is p a regular file?


                file_status s = status(p);


                cout << p << " size is " << file_size(p) << " perms " << "" ;
                printf("%o\n",s.permissions());
            }

            else if (is_directory(p))      // is p a directory?
            {

                cout << p << " is a directory containing:\n";

                typedef vector<path> vec;             // store paths,
                vec v;                                // so we can sort them later

                copy(directory_iterator(p), directory_iterator(), back_inserter(v));

                sort(v.begin(), v.end());             // sort, since directory iteration
                // is not ordered on some file systems

                for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
                {
                    //cout << "   " << *it << '\n';
                    read(*it);
                }
            }
            else
                cout << p << " exists, but is neither a regular file nor a directory\n";
        }
        else
            cout << p << " does not exist\n";
    }

    catch (const filesystem_error& ex)
    {
        cout << ex.what() << '\n';
    }
    return 0;
}

Salida

$ ./a.out ~/Desktop/test
"/home/usr/Desktop/test" is a directory containing:
"/home/usr/Desktop/test/a.out" size is 69446 perms 27746424350
"/home/usr/Desktop/test/la" is a directory containing:
"/home/usr/Desktop/test/la/Untitled Document" size is 0 perms 27746424170
"/home/usr/Desktop/test/la/lala" is a directory containing:
"/home/usr/Desktop/test/la/lala/Link to lalalala" is a link
"/home/usr/Desktop/test/la/lala/Untitled Folder" is a directory containing:
"/home/usr/Desktop/test/la/lala/lalalala" size is 0 perms 0
"/home/usr/Desktop/test/test.cpp" size is 2234 perms 0
"/home/usr/Desktop/test/test.cpp~" size is 2234 perms 0

Nota: Esos números que son como27746424350 cambiar cada vez que se ejecuta el programa.

Respuestas a la pregunta(4)

Su respuesta a la pregunta