C ++ / boost:检查进程权限

时间:2014-05-23 16:41:13

标签: c++ boost permissions boost-filesystem

我正在编写C ++程序,以便对网站进行一些静态分析和修改。我不会更改项目文件,但会在新文件夹中复制,分析和修改文件。

有没有办法检查,例如,使用boost::filesystem,如果我(程序/执行它的用户)具有足够的权限来读取(文件),执行(用于处理目录层次结构)并写入(文件或创建新文件夹)在当前文件夹及其文件上(或至少在unix系统下)?

2 个答案:

答案 0 :(得分:1)

不,您无法使用boost程序选项库检查文件权限。可以使用boost文件系统库查询文件权限:

#include <boost/filesystem.hpp> 
#include <stdio.h> 

namespace bfs=boost::filesystem;

int main(int argc,char * argv[])
{
    if (argc < 2) 
        return;

    bfs::path p(argv[1]);
    bfs::file_status s = status(p);
    printf("%X\n",s.permissions());
}

权限标志的值为enum perms in 升压/文件系统/ V3 / operations.hpp

答案 1 :(得分:0)

如果您使用的是Linux,则可以使用stat函数获取有关该文件的信息,包括模式权限,所有者ID以及此类文件的所有者组ID。 / p>

然后,您可以使用getuid将运行该程序的用户的权限与使用stat获得的权限进行比较。

两个链接(实际上是手册页)都有关于如何使用这些函数的示例。

此外,您可以尝试对所选文件执行某些操作,让我们说写,然后正确处理异常。您不必访问该文件,只需尝试打开它进行写入,如果您获得并且异常且errno等于 EACCESS (权限被拒绝),那么您不需要有很多权限。