ファイルの所有者に対して、ファイルに書き込み/読み取り/実行可能なアクセス権があるかどうかを確認するにはどうすればよいですか?Haskellを使ってLinuxファイルのファイルパーミッションをチェックする方法は?
私はFileMode
http://hackage.haskell.org/package/base-4.10.0.0/docs/System-Posix-Types.html#t:FileModeが見つかりましたが、私は簡単な方法で許可を判断することができないようです。
ファイルの所有者に対して、ファイルに書き込み/読み取り/実行可能なアクセス権があるかどうかを確認するにはどうすればよいですか?Haskellを使ってLinuxファイルのファイルパーミッションをチェックする方法は?
私は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.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"