Мне нужно, чтобы первый, кому понадобится блок его проинициализировал, остальным нужен доступ «только на чтение». Я так понимаю, что действовать надо как-то так:
if ((id = shmget(..., ..., 0444 | IPC_CREATE | IPC_EXCL)) == -1)
{
id = shmget(..., ..., 0666 | PC_CREATE);
initdata(id) // shmat внутри
}
char * data = (char *)shmat(id, 0, 0);
Но так получается, что тот, кто инициализировал имеет доступ и на запись. Имеет смысл после инициализации переоткрыть id по 0444 или уже навсегда этому блоку будут выданы права 0666? Будет ли идеологически верным переоткрывать по 0444?
Дополнительный опциональный вопрос по ftok - оно должно брать имя существующего файла. `touch /tmp/somename' подойдет?
P.S. Бггг, у нас нет тега unix system v.