【发布时间】:2019-03-01 09:51:13
【问题描述】:
我有几个问题基于以下来源:
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdio.h>
int g;
int main(void) {
int fd = shm_open("/myregion", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
ftruncate(fd, sizeof(int)); // set size by sizeof(int)
int *p1 = mmap(NULL, 10*sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd,0); //now map 10*sizeof(int).
if (p1== MAP_FAILED) {
printf("*****************error");
}
*p1 = mmap(NULL, 8*sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd,0);
if (p1== MAP_FAILED) {
printf("*****************error");
}
*p1=89;
return g;
}
问题 1: 为什么我在将 size 设置为 size_of(int) 然后映射 10*size_of(int) 时没有看到任何错误
问题 2: 这里创建了多少个共享内存?我的意思是只有一个共享内存创建或两个,因为我做了两次 mmap?
谢谢
【问题讨论】:
-
你能确定第一个 mmap 返回一个有效的地址吗?
-
我认为但可能我错了。
-
mmap返回(void *)-1失败。所以你的错误检查不能真正捕捉到失败。我想知道你运行代码时得到了什么。 -
我已经更新了我的来源。我现在已经检查了两者的错误。
-
您的第二次错误检查无效。
标签: c ubuntu posix shared-memory