Julia:正确使用isreadable()来防止“无法读取目录”错误

时间:2014-07-10 16:10:28

标签: julia

我正在使用Julia来运行我的文件系统并继续运行“无法读取目录”错误。但是,isreadable()总是在给我问题的特定目录上返回true。这是预期的行为吗?我使用不正确吗?

julia> isdir(dir)
true

julia> isreadable(dir)
true

julia> readdir(dir)
ERROR: unable to read directory /this/is/a/sample/dir/: Permission denied
 in readdir at ./file.jl:155

我在Ubuntu 12.04中运行Julia 0.3.0-prerelease + 3921。

谢谢

1 个答案:

答案 0 :(得分:1)

尝试读取 readdir 目录的进程的所有者需要读取目录才能成功。事实证明 isreadable 按以下方式定义

isreadable(st::StatStruct) = (st.mode & 0o444) > 0

这意味着只要目录可供任何用户阅读, isreadable 将返回true。

因此,如果该目录仅由其所有者读取,但该流程的所有者与该文件的所有者不同,则可读将返回true,但 readdir 将失败。

要解决此问题,必须根据需要比较所有者,组和其他权限。功能 stat 可用于确定所有者,组和其他权限,但获取有关当前用户的信息似乎目前有限。但是,你总是可以做一些shell处理。例如,以下内容将获取当前进程的uid并将其与文件所有者进行比较。

uid = int(split(readall(`ps nup $(getpid())`),'\n')[2][1:8])
x=stat(dir)
same_user = uid == x.uid

同样在这里是检查所有者可读性的便利功能

readable_by_owner = operm(x) & 4