gpt4 book ai didi

linux - readFile 为可读文件抛出 "permission denied"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:53 28 4
gpt4 key购买 nike

我尝试从我的磁盘中读取所有文件,但由于特定文件而失败。如果文件是常规文件且可读(在代码中检查并使用 stat),什么会阻碍读取文件?

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(为空),我希望返回一个空字符串,但不是错误。我不考虑什么?

最佳答案

这不是 Haskell 问题,而是特定于 Linux 的问题。即使它显示您有阅读权限,它也不会允许:

~ $ ls -lh /proc/1/task/1/maps
-r--r--r-- 1 root root 0 May 5 16:56 /proc/1/task/1/maps
~ $ cat /proc/1/task/1/maps
cat: /proc/1/task/1/maps: Permission denied

/proc 中的文件是内核相关的,其中有特殊情况。你可以阅读thisdiscussion以获取更多详细信息。

关于linux - readFile 为可读文件抛出 "permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43803372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com