【发布时间】:2013-11-19 11:15:40
【问题描述】:
使用 System V 共享内存 IPC 需要调用以下两个函数:
int shmget(key_t key, size_t size, int shmflg);
void *shmat(int shmid, const void *shmaddr, int shmflg);
为什么它们被设计成独立的,而不是有一个接受这些参数的函数,执行这两个函数并简单地返回地址?
我们可以将文件视为类比。字符串(文件路径)上的open 为我们提供了文件描述符,我们使用它来读取/写入文件。完成后,我们在文件描述符上close。这样的设计看起来很自然,我们不用open用字符串得到描述符,然后attach得到描述符。
作为我的想法的一个例子,看看FreeBSD sendmail shared memory implementation。
这种分离(shm_open和mmap)在POSIX共享内存中也存在,但原因是mmap在shm_open实现之前就存在并且可以复用,而mmap需要描述符(来源:UNIX 网络编程第 2 卷,R. Stevens,第 13 章,第 326 页)。
【问题讨论】:
标签: unix posix ipc shared-memory