在python中使用mmap

时间:2011-07-28 13:59:32

标签: python mmap

有人可以解释在这种情况下0如何影响python中的mmap:

mmap.mmap(0 , 256, "some tag")

我认为我总是需要传输文件描述符而不是0,所以为什么要归零?

3 个答案:

答案 0 :(得分:7)

从阅读CPython 2.7源代码,似乎在Windows上,指定fileno = 0与指定fileno = -1具有相同的效果,后者的意思是“映射匿名内存”。

在Unix上只接受-1:在我的64位Ubuntu框中使用Python 2.6.5,mmap.mmap(0, 256)失败,errno=19 (No such device)mmap.mmap(-1, 256)正常工作。

底线:fileno = 0fileno = -1的仅支持Windows的不可移植版本。它可能会被弃用(代码中甚至会有一个注释掉的警告)。

P.S。有问题的CPython源文件是Modules/mmapmodule.c

答案 1 :(得分:0)

您可以查看following discussion to know more

通常,如果第一个参数(fileno)为0或-1,那么您的语句表示您分配256个字节的内存,跨进程共享, 不由文件系统中的文件备份

顺便说一句,我已经使用Python 2.5,2.6,2.7和3.0在WinXp中测试了这段代码,一切正常。

答案 2 :(得分:0)

在* nix上,文件号0表示标准输入。因此,如果来自文件(您可以对终端设备进行映射),并且该文件是以读写方式打开的,那么您的调用将映射标准输入(否则您必须添加access=mmap.ACCESS_READ或类似)。如果这确实是预期的行为,我建议改为将其写为sys.stdin.fileno()