Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Си: Shared Memory   Badalian Slava   04 Mar 2005 19:13:04 
 Си: Shared Memory   Sergey Khvatov   05 Mar 2005 11:56:13 
Архивное /ru.linux/33008a598767.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional