有人可以解释在这种情况下0如何影响python中的mmap:
mmap.mmap(0 , 256, "some tag")
我认为我总是需要传输文件描述符而不是0,所以为什么要归零?
答案 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 = 0
是fileno = -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()
。