Прежде всего вы должны соблюдать эту ошибку
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.
Вы можете прокручивать вниз к [BUGS раздел страницы руководства] (http://man7.org/linux/man-pages/man2/shmget.2.html#BUGS). –
Спасибо за указание на ошибку. –
@JoachimPileborg вы можете дать ответ? –