我已成功使用两个stat()&access()单独确定用户是否具有对目录的读取或读/写访问权限.
我的问题是: - 有一个首选的方法吗?我看到很多使用的例子stat,但就我的目的而言,访问似乎更轻量级并且有用.
- 是否有任何问题(例如 - 安全性)与其中一个? - 我的方法有什么问题吗?
这是一些伪代码(从内存重新创建w/o编译):
// Using access():
bool readAccessPermission = false;
bool writeAccessPermission = false;
if (mode == 'r'){
if (access(directory, R_OK) == 0)
readAccessPermission = true;
}
else{
if (access(directory, R_OK && W_OK) == 0)
readAccessPermission = true;
writeAccessPermission = true;
}
// vs. using stat function
// assume I already called stat(directory) and have the object
bool readAccessPermission = false;
bool writeAccessPermission = false;
var retmode = ((stats.mode) & (0777));
if (modeString == 'r'){
if ((retmode) & (consts.S_IRUSR)){
readAccessPermission = false;
}
}
else{
if ((retmode) & (consts.S_IRUSR)){
readAccessPermission = true;
if ((retmode) & consts.S_IWUSR)){
writeAccessPermission = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
两者都等同于您的需求.access()如果你不打算对你填充的stat结构做任何事情,那么它是一个更干净的包装器.
请记住,在这样做时你正在创造一场比赛.权限可以在调用之间stat()/access()以及实际尝试使用目录时更改.地狱,甚至可以删除该目录并在那段时间重新创建.
最好只是尝试打开你需要的东西并检查EPERM.检查stat()或access()不保证后续操作不会返回EPERM.
| 归档时间: |
|
| 查看次数: |
26480 次 |
| 最近记录: |