Как получить права доступа к файлам с помощью библиотеки Boost c++?

Я работаю над проектом по созданию базы данных файлов, которые у меня есть в текущем каталоге. И одна из деталей, которые мне нужны в отношении моих файлов, — это права доступа к файлам, которые устанавливаются с помощью chmod в Ubuntu. (просто примечание:Мне также понадобится информация о группе и владельце, -например, chown-, и если бы вы могли сообщить мне, может ли Boost также получить информацию о владельце, это было бы здорово.)

Я использую библиотеку файловой системы boost и много раз проверял документацию, но не смог найти, как получить разрешения.

На этой странице показано, что enum permsимеет строки прав доступа к файлам, которые не отображаются в моей собственной файловой системе.hpp. (И я проверил, что у меня версия 1.49, также собранная из исходников, просто для уверенности). Также на той же странице здесь показано, что он может получить такие разрешения, как:

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.

Я не смог найти ни функцию разрешений, ни место, где она хранит список разрешений.

Это код, который у меня есть до сих пор (, который на самом деле взят из руководств по ускорению, но я изменил его, чтобы он был рекурсивным), если бы вы могли сказать мне, как получить права доступа/владения файлом или предложить другую библиотеку, чем подтолкнуть буду признателен.

РЕДАКТИРОВАТЬ:Я добавил s.permissions(), как предложил Итан_лиоу, однако результат оказался не таким, как ожидалось. Вот обновленный код и вывод.

//  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 
#include 
#include 
#include 
#include 
#include  
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 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;
}

Вывод:

$./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

Примечание:Те числа, которые похожи на 27746424350, меняются каждый раз при выполнении программы.

5
задан CharlesB 11 September 2012 в 16:56
поделиться