Проблемма такого рода. В одной проге создаётся шареная память с помощью 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 (2003)