我有一个全局变量:
static int *avgg;
在主要功能中:
avgg = mmap(NULL, sizeof *avgg, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
pid_t pid, wpid;
int status;
pid = fork();
if (pid == 0) {
avg(argc,argv);
print_avg();
}
else{
while ((wpid = wait(&status)) > 0) {
}
cout<<"Parent process";
print_avg();
通过使用mmap我试图在父进程和子进程之间共享内存,但我得到错误:
invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
答案 0 :(得分:2)
您尝试隐式将void *
的返回值int *
转换为avgg = (int *)mmap(NULL, sizeof *avgg, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
,并且您的编译器设置不允许您在没有明确演员的情况下这样做。
尝试<div id="image" background:url("path_image")></div>
答案 1 :(得分:0)
文档明确指出mmap
返回void*
,而不是int*
。
如果您确定数据是兼容的,您可以将前者转换为后者,但是您需要进行强制转换,因为没有匹配的隐式转换存在。
答案 2 :(得分:0)
您好,您可以使用此代码段解决此问题:
int file_descriptor = shm_open("/test_shared_memory", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
void *address = mmap ( NULL, size, PROT_READ | PROT_WRITE , MAP_SHARED, file_descriptor, 0);
// For checking that the address mapped correctly or not.
if (address == MAP_FAILED) {
printf("Memory map failed. :(");
return (EXIT_FAILURE);
}
感谢。