首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linux上的Python mmap“权限被拒绝”

Linux上的Python mmap“权限被拒绝”
EN

Stack Overflow用户
提问于 2011-06-09 07:48:13
回答 3查看 16.8K关注 0票数 24

我有一个非常大的文件,我试图用mmap打开,但它拒绝了我的许可。我尝试过os.open的不同标志和模式,但对我来说就是不起作用。

我做错了什么?

代码语言:javascript
复制
>>> import os,mmap
>>> mfd = os.open('BigFile', 0)
>>> mfile = mmap.mmap(mfd, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
mmap.error: [Errno 13] Permission denied
>>> 

(使用内置的open()通过python docs示例工作,但它似乎在读写模式下打开了文件的多个句柄。mmap.mmap方法只需要文件号,因此我不会假设需要创建一个file对象;因此我尝试使用os.open())

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-09 07:56:54

我认为这是一个标志问题,试着以只读方式打开:

代码语言:javascript
复制
mfd = os.open('BigFile', os.O_RDONLY)

默认情况下,mmap.mmap会尝试映射读/写,所以只映射只读:

代码语言:javascript
复制
mfile = mmap.mmap(mfd, 0, prot=mmap.PROT_READ)
票数 39
EN

Stack Overflow用户

发布于 2013-01-20 06:44:35

尝试将文件模式设置为r+。这对我在Linux上很有效:

代码语言:javascript
复制
mfd = os.open('BigFile', "r+")

然后,这对我来说是正常的:

代码语言:javascript
复制
mfile = mmap.mmap(mfd, 0)
票数 12
EN

Stack Overflow用户

发布于 2012-02-12 04:36:01

在我的例子中,出现这个错误是因为我试图在没有指定显式大小的情况下打开一个块设备。

FWIW您不能对块设备使用os.stat / os.fstat来获取设备的大小(始终为0),但您可以使用file.seekfile.tell

代码语言:javascript
复制
f = file("/dev/loop0", "rb")
f.seek(0, 2)  # Seek relative to end of file
size = f.tell()
fh = f.fileno()

m = mmap.mmap(f, size, mmap.MAP_PRIVATE, mmap.PROT_READ)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6286592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档