![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
Посмотрел все, что поиск по форуму дал на "File Mapping", но решения так и не нашел. У меня проблема вот в чем: нужно создать буфер для обменна данными между несколькими процессами. Когда главный процес создает и проецирует файл в область памяти, то он может производить и чтение и запись. А вот подчиненные процесы могут делать только чтение. При таком раскладе как у меня(см. код ниже) подчиненный процес, который пытается сделать отображение получает NULL, а GetLastError дает 0x05 - доступ запрещен.
вот код главного процесса: Код:
Код:
Код:
Последний раз редактировалось lowercase; 16.04.2013 в 02:35. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Вообще-то это нормальная ситуация, когда совместно используемые данные может писать, максимум, один процесс.
Что Вас не устраивает? Если нужен двусторонний обмен, используйте два разных файла. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]()
Два процесса спокойно могут писать в одну и ту же память. Другое дело, что они с там будут делать...
Вопрос, почему в одном MapViewOfFile() указывается размер а в другом нет? Далее, оба процесса под одной учетной записью или нет? Если один администратор а другой обычный могут быть проблемы, хотя я лично никогда не пробовал такой вариант. |
![]() |
![]() |
![]() |
#4 | |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
во втором случае указан 0 потому, что в описании указано
Цитата:
да. все процессы запускаються от имени администратора. |
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
Не так уж и долго как кажется. Просто размер буфера задается только в главном процесе. Это я его только для тестирования сразу в buffer_size установил. Оно работает, если подчиненный процесс сделает вызов MapViewOfFile c флагом FILE_MAP_READ или FILE_MAP_COPY. То есть, от главного процесса принимаются данные - работает нормально. Но мне нужна знапись из подчененного, которая при вызове MapViewOfFile с флагом FILE_MAP_WRITE(FILE_MAP_ALL_ACCESS) почему не дает ожидаемого результата.
Последний раз редактировалось lowercase; 16.04.2013 в 21:02. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
Не знаю на сколько это поможет. Но всетаки отмечу, что доступ к отражению файла в памяти будет монопольным - в один момент времени только один процесс может производить чтение или запись. Остальные ждут. Буду синхронизировать с помощью мютексов. Но мне сейчас главное сделать возможным чтение и запись данных в буфер из любого процесса.
Последний раз редактировалось lowercase; 16.04.2013 в 21:03. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 88
|
![]()
вот же банальщина - не ту константу передал в OpenFileMapping. вместо PAGE_READWRITE надо FILE_MAP_ALL_ACCESS.
с ума сойти можно: два дня не мог понять в чем проблема. весьма веселые грабли! ![]() случайно наткнулся на статью Создание именованной, совместно используемой памяти которая решила все мои беды (ну почти все) ![]() Последний раз редактировалось lowercase; 17.04.2013 в 01:38. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
lowercase, да все уже давно поняли, что проблемы у Вас из-за того, что передаёте ноль последним параметром MapViewOfFile.
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]()
кстати, второй процесс тоже может делать CreateFileMapping().
Это удобно, когда порядок запуска процессов не определен. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В чём разница между unit, header file, cpp file? | TwiX | Общие вопросы C/C++ | 6 | 29.04.2012 19:49 |
file mapping как с ним работать? | CodeNOT | Win Api | 2 | 01.03.2012 10:12 |
Как работать с file mapping? | castanic | Win Api | 7 | 12.11.2011 12:39 |
File Mapping | Gambler | Win Api | 1 | 13.08.2010 11:40 |
Свой PORT MAPPING (NAT) | exploys | Работа с сетью в Delphi | 0 | 05.06.2010 01:24 |