c - POSIX 共享内存 + 目录

标签 c posix shared-memory

我正在使用的操作系统(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/

相关文章:

c - 传递给 free() 的指针是否应该指向分配空间的开始?

Perl 过去的日期 如何?

perl - 如何在 perl 中的 fork 之间共享简单标量(计数器变量)?

c - _sopen_s 和 fopen .. 要使用什么?

c - 在 C 中执行正则表达式

linux - dup2 真的可以返回 EINTR 吗?

c - Linux 与 OS X 中的命名管道读取

c++ - 内存映射文件如何与写入文件的另一个进程同步?

c - 不同程序中的linux动态共享内存

c - 队列初始化功能不起作用