通过从c代码中读取并从python撰写,我看不到我在python中所做的更改。
因此,我真的很想知道MMAP是在C和Python等语言上工作还是在这里犯错,请让我知道。
从C代码读取:
#include <sys/types.h>
#include <sys/mman.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
char *shared;
int fd = -1;
if ((fd = open("hello.txt", O_RDWR, 0)) == -1) {
printf("unable to open");
return 0;
}
shared = (char *)mmap(NULL, 1, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
printf("%cn",shared[0]);
}
从Python写作
with open( "hello.txt", "wb" ) as fd:
fd.write("1")
with open( "hello.txt", "r+b" ) as fd:
mm = mmap.mmap(fd.fileno(), 1, access=ACCESS_WRITE, offset=0)
print("content read from file")
print(mm.readline())
mm[0] = "0"
print("content read from file")
print(mm.readline())
mm.close()
fd.close()
在您的C程序中,您的mmap()
创建了一个匿名映射,而不是基于文件的映射。您可能要指定fd
而不是-1
并省略MAP_ANON
符号。
shared = (char *)mmap(NULL, 1, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);