Привет, ЛОР.
Задача: сегмент разделяемой памяти пишет одна программа через shm_open(), ftruncate() и mmap(). Читает другая, через класс QSharedMemory. И наоборот.
Проблема в том, что Qt с целью кроссплатформенности видоизменяет имена сегментов разделяемой памяти. У QSharedMemory есть методы setKey() (Qt-only) и setNativeKey(), куда, по идее, передаётся платформозависимый ключ, в данном случае UNIX key name.
Когда у меня QSharedMemory на обоих концах, я работаю через setKey(), и всё работает замечательно.
Теперь я пытаюсь работать через setNativeKey(). Задаю ему имя, по образцу из native keys, которые Qt формирует сама, вроде /tmp/AnyName. После этого создание сегмента вроде бы проходит успешно (QSharedMemory::create() возвращает true), а вот QSharedMemory::lock() уходит в отказ, в сообщении об ошибке написано просто «can’t lock…».
У кого есть опыт такого кросс-библиотечного взаимодействия? Что делать?
Нашёл похожую тему на Stack Overflow, но там вопрошавший, кажется, так и остался в тупике.
