WSL mmap时报错:Bad file descriptor, Exec format error。同样的代码在虚拟机中会出现bus error core dump错误。
解决方法一是先在要映射的文件中通过vi写入字符。
解决方法二是加flags加MAP_ANON属性,使用匿名映射。
int * mem = mmap(NULL,4,PROT_READ | PROT_WRITE, MAP_SHARED|MAP_ANON, fd_mmap,0);
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
int main(int * argc, const char * agrv[])
{
int fd_mmap = open("./mem.txt",O_RDWR);
if(fd_mmap == -1)
{
printf("open mem.txt erro\n");
}
int * mem = mmap(NULL,4,PROT_READ | PROT_WRITE, MAP_SHARED|MAP_ANON, fd_mmap,0);
//int * mem = mmap(NULL,4,PROT_READ | PROT_WRITE, MAP_SHARED, fd_mmap,0);
if(mem == MAP_FAILED){
perror("mmap failed");
return -1;
}
pid_t pid = fork();
while(1) {
if(pid > 1) {
sleep(1);
*mem = 100;
printf("father mem = %d\n",*mem);
}
if(pid == 0)
{
sleep(1);
*mem = 1001;
printf("child mem = %d\n",*mem);
}
}
munmap(mem,4);
return 0;
}