>У меня есть две нити, которые должны использовать общую память.
>Принцип работы такой:
>1)создаётся структура в шаредной памяти, есть её пид
pid структуры в шаредной памяти ?????
>2)fork()
>3) у одного процесса shmat() - получаю указательна неё
>4) у второго аналогично
Тезис: указатели получены разные. То бишь два процесса картируют
одну и ту же область общей памяти, каждый из них присваивает этой
области памяти свой собственный диапазон виртуальных адресов.
>5) у структуры есть поле - указатель на некую область памяти, я
>хочу, чтоб она была видна из обоих нитей. В одной нити
>я делаю shmget, и вот указатель в той структуре настраиваю через
>shmat на эту область памяти
>6) в другой нити имея структуру, и то есть указатель хочу получить
>доступ к этой области памяти, которую только что выделил, но получаю
>Segmentation Fault.
Чего и следовало ожидать. Указатель, действительный в адресном
пространстве одного процесса, недействителен в адресном пространстве
другого. Скажу больше: поскольку shmat() на вновь созданную структуру
выполнен только в одном из процессов, в другом возможности обратиться
к соответствующему блоку просто нет. Данный блок не спроецирован в
адресное пространство того процесса, в коем происходит обращение.
>
>Вопрос такой: как мне можно сделать такой доступ, какой я
>пытался сделать.
>
Честно: я не понял, в чём состояла цель столь странных манипуляций.
А потому внятно ответить на последний вопрос я не могу :)