Julia 朱莉娅:正确使用isreadable()来防止;无法读取目录";错误
我正在使用Julia运行我的文件系统,并不断遇到“无法读取目录”错误。但是,isreadable()在给我带来问题的特定目录上总是返回true。这是预期的行为吗?我用错了吗Julia 朱莉娅:正确使用isreadable()来防止;无法读取目录";错误,julia,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 rea
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
谢谢一个目录需要被试图读取该目录的进程的所有者读取才能成功。事实证明,的定义如下
isreadable(st::StatStruct) = (st.mode & 0o444) > 0
这意味着只要目录可供任何用户读取,isreadable将返回true
因此,如果目录只能由其所有者读取,但进程的所有者与文件的所有者不同,isreadable将返回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
在中,可以使用try-catch块来绕过此问题,但这不是首选。