1
我嘗試讀取磁盤上的所有文件,並失敗並顯示特定文件。 什麼可以阻止讀取文件,當它是一個普通的文件,並且是可讀的(都在代碼中檢查和stat
)?readFile爲可讀文件拋出「權限被拒絕」
stat "/proc/1/task/1/maps"
File: /proc/1/task/1/maps
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: 4h/4d Inode: 209680 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-05 11:34:57.840873751 +0200
Modify: 2017-05-05 11:34:57.840873751 +0200
Change: 2017-05-05 11:34:57.840873751 +0200
Birth: -
的代碼是
module Main
import System.Posix.Files
main = do
putStrLn "tets_maps - trying to read file /proc/1/task/1/maps"
let fn = "/proc/1/task/1/maps" :: FilePath
status <- getSymbolicLinkStatus fn
readable <- fileAccess fn True False False
putStrLn "tets_maps - status regularFiel and readable"
putStrLn . show . isRegularFile $ status
putStrLn . show $ readable
res1 :: String <- readFile fn
putStrLn "tets_maps - result"
輸出是:
readProblem: /pro`c/1/task/1/maps: openFile: permission denied (Permission denied)`
爲什麼permission denied
之前該文件已經讀訪問測試時?我知道該文件的大小爲0(是emtpy),我希望返回一個空字符串,但不是錯誤。 我沒有考慮什麼?
非常感謝你的啓發。我閱讀了您提到的討論,並且對解決方案並不滿意 - 尤其是因爲它沒有廣泛傳播並且讓人們在幾個小時內檢查自己的代碼。 – user855443