Ошибка Shmget, неверный аргумент, если размер больше 4 - PullRequest
0 голосов
/ 29 сентября 2019

При использовании Shmget у меня возникают проблемы с использованием размеров более 4 байт.

test_shmid = shmget(foo_key, 4, IPC_CREAT | 0666); и ниже?

Нет проблем.


test_shmid = shmget(foo_key, 5, IPC_CREAT | 0666); и выше?

Возвращает -1 (не удается) с ошибкой: Недопустимый аргумент


Я подумал, что это может быть проблема с SHMAX, но после исследования я обнаружил: kern.sysv.shmmax:4194304 так что я не верю, что это так.Я также посмотрел на SHMSEG, но исключил это, так как я могу создать несколько сегментов размером 4, но это нормально, только когда я добавляю один из размеров 5 или выше.

Сегмент памяти, уже связанный с данным ключом, похоже, не является проблемой, так как я протестировал несколько случайных новых ключей, а также повторно использовал ключи, только изменяя параметр размера и, как и ожидалось,Сегмент создается очень хорошо, когда его размер меньше 5.

Используя OSX 10.13.6 на 64-битной архитектуре и компилируя с GCC, любые советы о том, где искать дальше или понять, что может пойти не так, будут в значительной степениоценили.

...