bool canRead(string _path)
{
assert (!_path.empty());
struct stat st;
if (stat(_path.c_str(), &st) == 0)
{
if (geteuid() == 0) // 程序的ueid 是 root用户 ;root用户,一定对文件可读可写
return true;
//*****不是root用户时 ,与_path这个文件的 user group other 依次判断
else if (st.st_uid == geteuid()) // owner 属性
return (st.st_mode & S_IRUSR) != 0;
else if (st.st_gid == getegid()) // group 组属性
return (st.st_mode & S_IRGRP) != 0;
else
return (st.st_mode & S_IROTH) != 0; // other 组属性
}
return false;
}
=====================
bool FileImpl::canExecuteImpl() const
{
poco_assert (!_path.empty());
struct stat st;
if (stat(_path.c_str(), &st) == 0)
{
if (st.st_uid == geteuid() || geteuid() == 0) // 注意 root用户可能没有执行权限
return (st.st_mode & S_IXUSR) != 0;
else if (st.st_gid == getegid())
return (st.st_mode & S_IXGRP) != 0;
else
return (st.st_mode & S_IXOTH) != 0;
}
else handleLastErrorImpl(_path);
return false;
}