当前位置: 首页 > 知识库问答 >
问题:

为什么以及何时应该使用IPC_NEW来创建信号量?

高钱青
2023-03-14
 static unsigned int state = 1 ;
 key_t h=ftok(".", state++);
 int sem_id=semget(h, no_of_sems, IPC_CREAT|0666);


2。

 int sem_id =semget(IPC_NEW,no_of_sems,0666|IPC_CREAT);

正如Linux手册http://man7.org/Linux/man-pages/man2/shmget.2.html中提到的那样

IPC_PRIVATE不是标志字段,而是key_t类型。如果将此特殊值用于key,则系统调用将忽略shmflg中除最低有效9位以外的所有位,并创建一个新的共享内存段。

Edit:
IPC_PRIVATE => IPC_NEW 

共有1个答案

子车鸿才
2023-03-14

首先,你应该观察BUG

   The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would
   more clearly show its function.

好的。我只是解释了我对shmget的了解

请参见shmget的说明

   int shmget(key_t key, size_t size, int shmflg);

DESCRIPTION
   shmget()  returns  the identifier of the System V shared memory segment
   associated with the value of the argument key. A  new  shared  memory
   segment,  with size equal to the value of size rounded up to a multiple
   of PAGE_SIZE, is created if key has the value IPC_PRIVATE or key  isn't
   IPC_PRIVATE,  no shared memory segment corresponding to key exists, and
   IPC_CREAT is specified in shmflg.
 /* resource get request flags */
 #define IPC_CREAT  00001000   /* create if key is nonexistent */
 #define IPC_EXCL   00002000   /* fail if key exists */
 #define IPC_NOWAIT 00004000   /* return error on wait */
   o  The key argument is equal to IPC_PRIVATE.

   o  The key argument does not already have a shared  memory
      identifier  associated  with it, and (shmflg&IPC_CREAT)
      is true.
 类似资料:
  • 问题内容: 为什么以及何时应该在php中使用该函数?使用后是否应该始终使用它?我读到我必须使用它来防止会话固定,这是唯一原因吗? 问题答案: 什么啊 就像函数名称所说的那样,它是一个函数,它将用新的ID替换当前的会话ID,并保留当前的会话信息。 它有什么作用? 它主要有助于防止会话固定攻击。会话固定攻击是恶意用户试图利用系统中的漏洞固定(设置)另一个用户的会话ID(SID)的地方。这样,他们将拥有

  • 我知道可以用Scala表示如下: 我明白为什么它是有用的。例如,给定两个函数: 我可以很容易地编写函数<code>getPhoneByUserId(userId:Int),因为<code>选项是一个单子: ... 现在我看到Scala中的< code >应用函子: 我想知道我什么时候应该使用它而不是monad。我想Option和List都是。您能否举一个简单的例子来使用与Option和List一起

  • 问题内容: 抱歉,如果我有点模棱两可,但是我试图了解使用Node.js而不是其他服务器端语言的真正优势。 我是JavaScript爱好者,所以我可能会玩Node.js,但我想知道是否应该在项目中使用它。 问题答案: 在V8上发生了异步非阻塞I / O 构建。 因此,我们拥有了Google JavaScript解释器V8的所有性能提升。由于JavaScript性能竞赛尚未结束,您可以期望Google

  • 问题内容: 通过它的外观- 似乎创建了一个对象的克隆。如果是这样的话,那么与实现Cloneable接口有关的担忧(只有不可变对象才是新对象,因为可变对象复制了引用)是最好的,为什么? 昨天我实现了cloneable,然后意识到我必须对非 String / Primative 元素提供自己的修改。然后,我被告知我正在使用哪个。两种实现似乎都提供了类似的功能。 谢谢 问题答案: Josh Bloch提

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或