Проблемма такого рода. В одной проге создаётся шареная память с
помощью shm_open, и затем загружается с помощью mmap. Затем в
полученную область mmap'ом заливаю массив структур. Теперь запускаю
вторую прогу, так же shm_open и mmap открываю и загружаю шареную
память. Но весь прикол в том, что в отркрытой памяти находятся
совершенно другие данные, т.е. не мусор и не нарушенный массив структур,
а именно кусок конфига шрифтов. Вот и вопрос, почему открылся не тот
участок памяти?
Тут создаётся память и заливаются данные:
....
shm_unlink(PB_MEM_DB_FILE);
if((fmd = shm_open(PB_MEM_DB_FILE,O_RDWR | O_CREAT | O_EXCL, S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR)) < 0){
PBWriteToLog("Can't allocate shared memory by shm_open\n");
exit(1);
}
ftruncate(fmd, sizeof(user_mem_unit)*PB_MAX_QUERY_ANSWER / PB_QUERY_STEP);
users = (user_mem_unit*)mmap(NULL,sizeof(user_mem_unit)*PB_MAX_QUERY_ANSWER / PB_QUERY_STEP,
PROT_READ | PROT_WRITE, MAP_SHARED, fmd, 0);
....
заливаю данные таким способом
users[k].nick = strcpy((users[k].nick = new char[strlen(res[i+1])]),res[i+1]);
и.т.д.
А вот так пытаюсь их получить:
...
struct stat st;
if((fmd = shm_open(PB_MEM_DB_FILE,O_RDWR, 0)) < 0){
PBWriteToLog("Can't open shared memory by shm_open\n");
cout << "Can't open shared memory by shm_open" << endl;
exit(1);
}
fstat(fmd,&st);
users = (user_mem_unit*)mmap(NULL,st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fmd, 0);
int i = 0;
while(i < 100){
cout << "users[i].nick = " << users[i].nick << endl;
i++;
}
...
А вот что выводится:
...
users[i].nick =
users[i].nick = alias>852</alias>
<alias>cp852</alias>
<alias>ibm852</alias>
<collation name="cp852_general_ci" id="40" flag="primary">
<order>Hungarian</order>
<order>Polish</order>
<order>Romanian</order>
<order>Croatian</order>
<order>Slovak</order>
<order>Slovenian</order>
<order>Sorbian</order>
</collation>
<collation name="cp852_bin" id="81" order="Binary" flag="binary"/>
</charset>
<charset name="cp1256">
<family>Arabic</family>
<description>Windows Arabic</description>
<alias>ms-arab</alias>
<alias>windows-1256</alias>
<collation name="cp1256_bin" id="67" order="Binary" flag="binary"/>
<collation name="cp1256_generalA
users[i].nick = ary">
<order>Hungarian</order>
<order>Polish</order>
...
и так много...
Пробовал вместо shm_open, в читающей проге, open, но результат тот же.
Размер выделяймой области не влияет на результат.
В чём проблемма?
Заранее спасибо!!!
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от romanSA
Ответ на:
комментарий
от cvv
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от cyclon

Ответ на:
комментарий
от cyclon

Ответ на:
комментарий
от cyclon

Ответ на:
комментарий
от cyclon

Ответ на:
комментарий
от cvv
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от cvv
Ответ на:
комментарий
от buddha

Ответ на:
комментарий
от cvv
Ответ на:
комментарий
от romanSA
Ответ на:
комментарий
от romanSA

Ответ на:
комментарий
от romanSA

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум работа с I/O-memory (2004)
- Форум Доступ к разделяемой памяти из различных процессов (2016)
- Форум IPC не компилируется (2006)
- Форум Сборка модуля ядра из исходников под Linux 4.4 (2018)
- Форум Некий прокси сервер. Проблема с пересылкой пакетов. Lua (2020)
- Форум memory mapped файл (2014)
- Форум Фреймбуфер возвращает неправильное разрешение экрана (2016)
- Форум Помогите с gdb (2013)
- Форум ftruncate64(): Invalid argument, Error code: 22 (2012)
- Форум shared memory (2002)