2017-08-05 20 views
1

ファイルの所有者に対して、ファイルに書き込み/読み取り/実行可能なアクセス権があるかどうかを確認するにはどうすればよいですか?Haskellを使ってLinuxファイルのファイルパーミッションをチェックする方法は?

私はFileMode http://hackage.haskell.org/package/base-4.10.0.0/docs/System-Posix-Types.html#t:FileModeが見つかりましたが、私は簡単な方法で許可を判断することができないようです。

答えて

2

ウェルFileModeは、CModeのタイプ別名で、32ビットの数値です。パッケージにはさらに、ownerReadMode,ownerWriteMode,ownerExecuteModeなどの定数が含まれています。 groupReadMode,groupWriteMode,groupExecuteMode; otherReadMode,otherWriteModeおよびotherExecuteMode

intersectFileModes :: FileMode -> FileMode -> FileModeを使用して交差を特定できます。いずれかの定数との交差がその定数と同じ場合、ファイルはそのモードを持ちます。例えば

それをより便利にするために、我々は関数を定義することができますが:

import System.Posix.Types(FileMode) 
import System.Posix.Files.ByteString(intersectFileModes) 

hasMode :: FileMode -> FileMode -> Bool 
hasMode fa fb = intersectFileModes fa fb == fa 

それでは機能hasMode ownerReadModeがファイルモードをチェックし、ファイルモードは、その権限が含まれている場合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" 
関連する問題