我正在使用的操作系统(IBM CNK,它不是 Linux,但有点符合 POSIX)不允许我使用 fopen() 或 mkdir( ), 分别。看起来我必须使用 shm_open() 来获取文件描述符,然后使用 fdopen() 来使用共享区域进行文件 I/O。
我需要使用 ftruncate() 设置共享区域的大小,还是它会自动增长?我试过了,我可以简单地 fprintf 进入该区域并且它有效,但它安全吗? 联机帮助页只说:
A new shared memory object initially has zero length — the size of the object can be set using ftruncate(2). The newly allocated bytes of a shared memory object are automatically initialized to 0.
我要 mmap() 区域吗?我只是想在内存中有一个包含文件的目录。
我如何在/dev/shm 中创建一个新目录?这是“像使用普通文件系统一样使用/dev/shm”的新事物吗?/dev/shm 中的目录可能不是标准目录吗?
最佳答案
您的操作系统是否提供功能齐全的 mmap
?您是否只需要亲戚中的共享内存区域,即您 fork
关闭的进程?如果满足这两个条件,您根本不需要任何文件,只需使用 mmap:
char *shm_area;
shm_area = mmap(NULL, mySHMsize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, 0, 0);
if (fork() == 0) {
// Child, can access shm_area.
} else {
// Parent, can access shm_area.
}
关于c - POSIX 共享内存 + 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520917/