【问题标题】:C - System V - remove shared memory segmentC - System V - 删除共享内存段
【发布时间】:2021-05-25 19:14:20
【问题描述】:

我正在使用 System V IPC 的共享内存。我使用以下命令使用键创建段:

shmid1 = shmget(key1,1024,0666|IPC_CREAT);

现在,我正在尝试关闭/删除共享内存段。

我正在使用以下命令来验证它的存在:

sm_id = shmget(roomNumber, 1024, IPC_EXCL | 0666);

如果程序中断,我需要它具有 -1 或类似的值。所以我需要在我的程序中断之前删除该段。我怎样才能做到这一点?我读到了ipcrm,但不知道如何使用它。

谢谢

【问题讨论】:

  • 是的,你需要删除一个内存段。 ipcrm 是一个命令行工具,如果你想以编程方式调用它,你应该使用shmctl。如果您尝试比“不确定如何使用它”更具体,则可以提供更量身定制的答案。
  • @SergeyA 你能告诉我如何使用 shmctl 关闭我的内存段吗?

标签: c linux ipc


【解决方案1】:

作为 cmets 的后续,展示了如何将共享内存段标记为销毁:

shmid1 = shmget(key1,1024,0666|IPC_CREAT);
...
shmctl(shmid1, IPC_RMID, NULL)

【讨论】:

  • @Daniel 为什么要使用权限位和 IPC_EXCL 来验证段的存在?你也不需要。然而,这可能不是您的问题的直接原因。您需要提供演示问题的应用程序的最少源代码。
  • 对不起,它确实有效,我只是在我的代码中有一个小问题。
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2011-01-14
  • 2011-01-09
  • 1970-01-01
  • 2012-03-20
  • 2018-10-03
  • 2013-03-14
相关资源
最近更新 更多