Почему и когда следует использовать IPC_NEW для создания семафора?

мы можем создать семафор двумя способами. 1.

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.Если это специальное значение используется для ключа, системный вызов игнорирует все, кроме наименее значимых 9 бит shmflg, и создает новый сегмент разделяемой памяти.

Я не понимаю, что говорится в руководстве. Может кто-нибудь объяснить больше? Каковы плюсы и минусы использования 1-го метода по второму методу?

Edit:
IPC_PRIVATE => IPC_NEW
1 ответ

Прежде всего, вы должны наблюдать за BUG

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

ok.Just я объяснил, что я знаю о 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.

В ipc.h файле IPC_CREAT определяется как макрос, как

/* 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 */

Если IPC_CREAT используется один, shmget() либо возвращает идентификатор сегмента для вновь созданного сегмента, либо возвращает идентификатор для сегмента, который существует с тем же значением ключа. Если IPC_EXCL используется вместе с IPC_CREAT, то либо создается новый сегмент, либо если сегмент существует, то вызов завершается с -1. IPC_EXCL бесполезен сам по себе, но в сочетании с IPC_CREAT его можно использовать как средство, гарантирующее отсутствие доступа к существующему сегменту для доступа.

Идентификатор разделяемой памяти и связанная структура данных и сегмент разделяемой памяти по меньшей мере байтов размера создаются для ключа, если выполняется одно из следующих значений:

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.

licensed under cc by-sa 3.0 with attribution.