如何使用 Haskell 检查 Linux 文件的文件权限?
How can I check file permissions of a Linux file using Haskell?
如何判断一个文件是否拥有文件所有者的写/读/可执行权限?
我找到了 FileMode
http://hackage.haskell.org/package/base-4.10.0.0/docs/System-Posix-Types.html#t:FileMode,但我似乎找不到确定权限的简单方法。
嗯 FileMode
是 CMode
的类型别名,是一个 32 位数字。该包还包含常量,如 ownerReadMode
、ownerWriteMode
、ownerExecuteMode
; groupReadMode
、groupWriteMode
、groupExecuteMode
; otherReadMode
、otherWriteMode
和 otherExecuteMode
。
您可以使用intersectFileModes :: FileMode -> FileMode -> FileMode
来确定交叉点。如果与常量之一的交集与该常量相同,则文件具有该模式。
例如:
import System.Posix.Files(getFileStatus,fileMode,ownerReadMode)
import System.Posix.Files.ByteString(intersectFileModes)
main = do
fs <- getFileStatus "foo.file"
if intersectFileModes (fileMode fs) ownerReadMode == ownerReadMode
then print "owner can read"
else print "owner can not read"
为了更方便,我们可以定义一个函数:
import System.Posix.Types(FileMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
那么函数 hasMode ownerReadMode
将检查文件模式和 return True
如果文件模式包含该权限,否则 False
.
现在我们可以将上面的程序重写为:
import System.Posix.Types(FileMode)
import System.Posix.Files(getFileStatus,fileMode,ownerReadMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
main = do
fs <- getFileStatus "../README.md"
if hasMode ownerReadMode (fileMode fs)
then print "owner can read"
else print "owner can not read"
如何判断一个文件是否拥有文件所有者的写/读/可执行权限?
我找到了 FileMode
http://hackage.haskell.org/package/base-4.10.0.0/docs/System-Posix-Types.html#t:FileMode,但我似乎找不到确定权限的简单方法。
嗯 FileMode
是 CMode
的类型别名,是一个 32 位数字。该包还包含常量,如 ownerReadMode
、ownerWriteMode
、ownerExecuteMode
; groupReadMode
、groupWriteMode
、groupExecuteMode
; otherReadMode
、otherWriteMode
和 otherExecuteMode
。
您可以使用intersectFileModes :: FileMode -> FileMode -> FileMode
来确定交叉点。如果与常量之一的交集与该常量相同,则文件具有该模式。
例如:
import System.Posix.Files(getFileStatus,fileMode,ownerReadMode)
import System.Posix.Files.ByteString(intersectFileModes)
main = do
fs <- getFileStatus "foo.file"
if intersectFileModes (fileMode fs) ownerReadMode == ownerReadMode
then print "owner can read"
else print "owner can not read"
为了更方便,我们可以定义一个函数:
import System.Posix.Types(FileMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
那么函数 hasMode ownerReadMode
将检查文件模式和 return True
如果文件模式包含该权限,否则 False
.
现在我们可以将上面的程序重写为:
import System.Posix.Types(FileMode)
import System.Posix.Files(getFileStatus,fileMode,ownerReadMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
main = do
fs <- getFileStatus "../README.md"
if hasMode ownerReadMode (fileMode fs)
then print "owner can read"
else print "owner can not read"