|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Sergey Khvatov 2:5020/175.2 05 Mar 2005 11:56:13 To : Badalian Slava Subject : Си: Shared Memory --------------------------------------------------------------------------------
Fri Mar 04 2005 18:13, Badalian Slava wrote to All:
BS> пробовал делать
BS> struct somestruct name[50];
BS> mmap(&name, sizeof(name) * длинна массива, flags(rwx), ANON (пробовал
BS> добавть `| shared`), -1, 0); // return > -1
BS> name[0].el = 1;
BS> if (fork() == 0){
BS> name[0].el = 2;
BS> exit(0);
BS> }
BS> waitpid(-1,0,0);
BS> printf("%d\n", name[0].el); // выводит 1
BS> exit(0);
BS> Как быть?
Прочитать man. mmap отображает сегмент файла, создаёт новый сегмент памяти и
отображает его в адресное пространство задачи или отображает существующий
сегмент памяти созданный таким образом.
Попытки шарить статический объект (а тем более объект из стека) не пройдут.
поэтому тебе надо создать новый объект:
your_data_type *data = mmap (NULL, len, prot, MAP_SHARED|MAP_ANONYMOUS, 0, 0);
- и (после проверки) пользоваться им. fork() должен сохранить это для потомка
(хотя я не проверял), а exec-у надо будет передать её адрес.
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/33008a598767.html, оценка из 5, голосов 10
|