Получить владельца и группу файла с помощью boost

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

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

Я нашел функцию posix fstat, но опять же я хотел бы использовать boost или другую библиотеку C++, а не функции C.


person Geoffroy    schedule 23.04.2012    source источник
comment
@CharlesB Как мой пост может дублировать это? Другой может быть дубликатом, но не моим, так как он старше.   -  person Geoffroy    schedule 17.09.2012


Ответы (1)


То, что вы просите сделать, это системный вызов Unix. Но ты не хочешь позвонить? Почему? Какую возможную ценность может дать буст? Это не переносимость, так как ничто за пределами Unix не будет иметь значимого поля st_gid.

person Andy Ross    schedule 23.04.2012
comment
Он будет переносим на все системы posix :) Так что, возможно, есть такая библиотека C++, реализующая это. И поскольку я работаю над инструментом CLI, он на самом деле не предназначен для Windows и других систем, отличных от posix. - person Geoffroy; 24.04.2012
comment
POSIX — это спецификация, Unix — это реализация, это не совсем одно и то же. Система posix не может быть системой unix. И в этом случае вы НИКОГДА не используете какую-либо библиотеку, потому что все это системный вызов. Почему я должен использовать new, поскольку он разрешается в системный вызов? Здесь то же самое. - person Geoffroy; 24.04.2012
comment
Вам нужен ответ или нет? Ясно, что все это не системный вызов: вы не можете открыть окно, распаковать поток zlib или вычислить хэш MD5 с помощью системного вызова. Но вы можете создать файл. Вы пишете на языке, который обеспечивает беспрепятственный доступ к системным вызовам вашей платформы. Используй это. - person Andy Ross; 25.04.2012
comment
Только один момент: системный вызов включает в себя инструкцию прерывания, которая не может быть воспроизведена изначально в C или C++. Функции fstat уже являются оболочкой системного вызова, а не самим системным вызовом, поэтому может существовать библиотека C++, которая делает то же самое. Вы представляете мне системный вызов как решение, хотя это всего лишь одна оболочка. Но если решения на C++ нет, просто скажите, это все, что я хочу знать! - person Geoffroy; 25.04.2012
comment
Вы должны запустить систему во всех случаях. Вот как, по сути, ваш процесс запрашивает информацию у ОС. Все обертки в конечном итоге создают ловушку для ОС. Функции stat/fstat в библиотеке C являются простейшими из возможных оболочек, и, поскольку они изначально доступны в C/C++, их следует использовать. - person Andy Ross; 26.04.2012
comment
Тот факт, что они самые простые, не означает, что вы должны их использовать, или зачем нужны другие библиотеки? Если мне нужно сделать какую-то сеть, я буду использовать некоторую библиотеку OO, чтобы упростить задачу, я не буду напрямую запускать системный вызов, используемый для перенаправления данных в определенную область памяти, в то же время, когда сигнал отправляется на сетевой контроллер. Но в любом случае, поскольку у меня нет другого ответа, я все равно буду использовать функцию C, и спасибо за обсуждение :) - person Geoffroy; 26.04.2012
comment
@AndyRoss boost::filesystem действительно предоставляет абстракцию для битовых масок разрешений POSIX, таких как чтение/запись/выполнение, поэтому абсолютно имеет смысл спросить, почему boost::filesystem опускает абстракцию для владельца/группы POSIX. - person Gunther Piez; 17.06.2013