- 文件映射和匿名映射的主要区别是什么。
- 当我们需要进程间通信时,如何在文件映射和匿名映射之间进行选择。
- 使用这些的优点和缺点是什么?
void *mmap(void *addr,size_t lengthint“ prot”,int“ flags,int fd, off_t offset)
文件支持映射 - 在Linux中,存在一个文件/dev/zero,它是无限的0字节源。您只需打开此文件,并使用适当的标志将其描述符传递给mmap()调用,即如果要共享内存,则使用MAP_SHARED
,如果不想共享则使用MAP_PRIVATE
。
例如-
.
.
if ((fd = open("/dev/zero", O_RDWR)) < 0)
printf("open error");
if ((area = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0)) == MAP_FAILED)
{
printf("Error in memory mapping");
exit(1);
}
close(fd); //close the file because memory is mapped
//create child process
.
.
if ((area = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
printf("Error in anonymous memory mapping");
所以,这些文件支持的映射和匿名内存映射只能在相关进程之间使用。
如果你需要在不相关的进程之间使用,那么你可能需要通过使用shm_open()
创建命名的共享内存,然后可以将返回的文件描述符传递给mmap()
。
mmap()
时,它与匿名映射相同。 - Shubham_K