The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Общая память для процессов"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Общая память для процессов"  
Сообщение от Serega.M (ok) on 15-Ноя-08, 17:49 
Необходимо создать несколько дочерних провессов, и выводить на экран в каждом процессе (дочерних + родительском) какую-нибудь информацию, при этом в самом начале необходимо указывать порядковый номер записи и pid процесса. Как организовать общую память (переменную) для всех процессов? При этом дочернии процессы могут также создавать новые процессы.

На пример: pid родителя - 0001, pid дочерних - 0002, 0003, 0004.
Вывод на экран:
1 0001
2 0002
3 0003
4 0004
5 0002
6 0004

Помогите пожалуйста. :)

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Общая память для процессов"  
Сообщение от Ivanoff (ok) on 15-Ноя-08, 19:58 
Есть несколько способов, сейчас в голову приходят:
- неименованные каналы (скорее всего для вашего случая самое лучшее)
- именованные каналы
- разделяемая память (Если вы решите пойти по этому пути то придется еще задуматься о синхронизации чтения/записи из разделяемой переменной. )

Подробную информацию можно найти на этом сайте с примерами кода.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 15-Ноя-08, 20:32 
>Есть несколько способов, сейчас в голову приходят:
>- неименованные каналы (скорее всего для вашего случая самое лучшее)
>- именованные каналы
>- разделяемая память (Если вы решите пойти по этому пути то придется
>еще задуматься о синхронизации чтения/записи из разделяемой переменной. )
>
>Подробную информацию можно найти на этом сайте с примерами кода.

Можете предложить структуру по какой при помощи именованных каналов все процессы будут получать доступ на изменение одной переменной?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Общая память для процессов"  
Сообщение от NuINu (??) on 15-Ноя-08, 20:51 
>>Есть несколько способов, сейчас в голову приходят:
>>- неименованные каналы (скорее всего для вашего случая самое лучшее)
>>- именованные каналы
>>- разделяемая память (Если вы решите пойти по этому пути то придется
>>еще задуматься о синхронизации чтения/записи из разделяемой переменной. )
>>
>>Подробную информацию можно найти на этом сайте с примерами кода.
>
>Можете предложить структуру по какой при помощи именованных каналов все процессы будут
>получать доступ на изменение одной переменной?

можно через пайпы, тока не структуру а протокол, все взаимодействия через родительский процесс...
потомок запрашивает у родительского процесса(или у дедушкина или прадедушкина) следующий номер. можно конечно специальный процесс енумератор организовать..

только неудобно это.
проще всего через разделяемую память сделать и не париться. а синхронизацией заморачиваться не надо, достаточно просто сделать :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 15-Ноя-08, 21:21 
>можно через пайпы, тока не структуру а протокол, все взаимодействия через родительский
>процесс...
>потомок запрашивает у родительского процесса(или у дедушкина или прадедушкина) следующий номер. можно
>конечно специальный процесс енумератор организовать..
>
>только неудобно это.
>проще всего через разделяемую память сделать и не париться. а синхронизацией заморачиваться
>не надо, достаточно просто сделать :)

Я бы хотел сделать через разделяемую память, но единственный пример, который я смог найти и его описание, обсалютно не понятен и не работает у меня.. :(
Счас пробую организовать работу через каналы..

Вот задание полностью:
Создать дерево процессов следующего вида:
*ну тут рисунок*
Каждый процесс делает следующие:
каждое dt = номер процесса по дереву умноженному на 16 мск следующего вида:
номер по дереву _ порядковый номер записи _ pid _ pid родительского процесса _ текущее время (ч.м.с.мс)
(например 1 1 1123 1121 10.30.45.785). Сделать tab по дереву
Каждый процесс работает в течении времени = номер процесса по дереву делённому на 4 (t=(9-n)/4) в секундах. Перед завершением род. процессов завершать все дочерние.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Общая память для процессов"  
Сообщение от angra (ok) on 16-Ноя-08, 02:01 
Очередной студент-недоучка?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 17-Ноя-08, 00:12 
>Очередной студент-недоучка?

Очередной студент-переучка?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 15-Ноя-08, 23:34 
Вот на эту часть кода постоянно выдаёт ошибку " *** [ex] Bad system call"

int segment_id;
int segment_size = getpagesize();
key_t key;
key = ftok (".",getpid());
segment_id = shmget(key,segment_size,IPC_CREAT|IPC_EXCL);

Что не так я делаю???

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Общая память для процессов"  
Сообщение от NuINu (??) on 16-Ноя-08, 15:27 
>Вот на эту часть кода постоянно выдаёт ошибку " *** [ex] Bad
>system call"
>
>int segment_id;
>int segment_size = getpagesize();
>key_t key;
>key = ftok (".",getpid());
>segment_id = shmget(key,segment_size,IPC_CREAT|IPC_EXCL);
>
>Что не так я делаю???

скорее всего вы не выставили права, размер страницы определять совершенно не обязательно. вам выделиться память кратная этому числу,а вам то и нужен один инт.

вот часть кода которая получает разделяемую память и в случае неудачи переходит на конец функции где освобождается семафор(полученный ранее)
    //Создадим разделяемую область памяти
    shm_buf_id = shmget(IPC_PRIVATE, sizeof(buf_change), IPC_CREAT|IPC_EXCL|0660);
    if(shm_buf_id == -1) {
        printf("Can't initialize share memmory: %s\n", strerror(errno));
        goto end_sem;
    }

да и поскольку вы генерируете все свои процессы из одного совершенно нет необходимости использовать ftok для генерации кей.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 17-Ноя-08, 00:16 
>[оверквотинг удален]
>    //Создадим разделяемую область памяти
>    shm_buf_id = shmget(IPC_PRIVATE, sizeof(buf_change), IPC_CREAT|IPC_EXCL|0660);
>    if(shm_buf_id == -1) {
>        printf("Can't initialize share memmory:
>%s\n", strerror(errno));
>        goto end_sem;
>    }
>
>да и поскольку вы генерируете все свои процессы из одного совершенно нет
>необходимости использовать ftok для генерации кей.

Попробовал сделать как у вас - та же ошибка :(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Общая память для процессов"  
Сообщение от NuINu (??) on 17-Ноя-08, 11:17 
>[оверквотинг удален]
>>    if(shm_buf_id == -1) {
>>        printf("Can't initialize share memmory:
>>%s\n", strerror(errno));
>>        goto end_sem;
>>    }
>>
>>да и поскольку вы генерируете все свои процессы из одного совершенно нет
>>необходимости использовать ftok для генерации кей.
>
>Попробовал сделать как у вас - та же ошибка :(

ошибка на этапе компиляции или выполнения? мне кажеться что ошибка в чем то другом.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 20-Ноя-08, 12:03 
>ошибка на этапе компиляции или выполнения? мне кажеться что ошибка в чем то другом.

Ошибка в среде.. Теперь использую OpenSuse 10.3 всё ок. Вопрос пока снят ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Общая память для процессов"  
Сообщение от Vladyslav Lazarenko on 16-Ноя-08, 22:00 
http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/s...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Общая память для процессов"  
Сообщение от vertur on 17-Ноя-08, 03:09 
>http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/s...

Товарисчи! Вы чего со всем с дуба рухнули с этим бустом ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Общая память для процессов"  
Сообщение от vertur on 17-Ноя-08, 03:11 
>[оверквотинг удален]
>
>Вывод на экран:
>1 0001
>2 0002
>3 0003
>4 0004
>5 0002
>6 0004
>
>Помогите пожалуйста. :)

А вам на хоботе вроде уже ответили про mmap ?
Или весь инет надо опросить ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 17-Ноя-08, 10:39 
>А вам на хоботе вроде уже ответили про mmap ?
>Или весь инет надо опросить ?

На ixbt? Да ответили и намного оперативней и понятней, чем здесь....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Общая память для процессов"  
Сообщение от angra (ok) on 17-Ноя-08, 13:18 
Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Общая память для процессов"  
Сообщение от Serega.M (ok) on 17-Ноя-08, 16:28 
>Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.

Ммдяя.. от чего же такая не любовь к нам?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "ударим автопробегом поколено"  
Сообщение от Andrey Mitrofanov on 17-Ноя-08, 23:23 
>>Здесь не любят студентов, удивительно что вам вообще хоть что-то ответили.
>Ммдяя.. от чего же такая не любовь к нам?

Потому что сначала ленивые тупые неучи побираются по форумам, а потом получают ДипломСамостийногоОбразца и приходят куда-ни-то _работать_, где и продолжают побираться вместо того, чтобы ..., где их приходится кому-то учить по-новой, чему они всеми четырьмями ногами упираются, и делать за них их работу, пока они втупляют в элементарные вещи, начиная с букваря имени первого класса и орфографии, но их все должны холить и лелеять (начиная с "форумов толковых и халявных", конечно в первую голову) -- они Жо дипломированные Специалисты.

Но да, природа этой нелюбви ещё мало изучена современной наукой. Отдельные исследователи полагают, что в ограниченных популяциях доминирующие самцы для поддержания собственного статуса обязаны чморить молодёжь просто в силу жестокости эволюции и необходимости выживания в конкурентной среде: кто больше распушил хвост - того и... тапки. Другие склоняются к мнению, что написание скриптов на шеле и форков с IPC на Си угрожает самому существованию невладеющих этими премудростями старых павианов, вожаков стаи -- они вынуждены жестоко подавлять наклёвывающуюся угрозу их статусу со стороны мол.поколения, практически применяя силу. Третьи выдвигали версию, что вербальная передача знаний и умений в социуме невозможна, в чём многократно убеждались "седые старцы", познавшие МудростьДзен, и им глубоко симпатичны зелёные птенцы ищущие в их мудрости решения задачи и упускающие возможность Просветления, но Дзен учит их быть Справедливыми и мокать жаждущих знаний - раз за разом. Ни одна из этих гипотез, как и другие, менее известные, не нашла до сих пор фактического подтверждения...

Нау-у-ука!.. ...по-прежнему в неоплатном долгу перед НароднымХазяйсвом. :-/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "ударим автопробегом поколено"  
Сообщение от Serega.M (ok) on 18-Ноя-08, 00:54 
>[оверквотинг удален]
>павианов, вожаков стаи - они вынуждены жестоко подавлять наклёвывающуюся угрозу их
>статусу со стороны мол.поколения, практически применяя силу. Третьи выдвигали версию, что
>вербальная передача знаний и умений в социуме невозможна, в чём многократно
>убеждались "седые старцы", познавшие МудростьДзен, и им глубоко симпатичны зелёные птенцы
>ищущие в их мудрости решения задачи и упускающие возможность Просветления, но
>Дзен учит их быть Справедливыми и мокать жаждущих знаний - раз
>за разом. Ни одна из этих гипотез, как и другие, менее
>известные, не нашла до сих пор фактического подтверждения...
>
>Нау-у-ука!.. ...по-прежнему в неоплатном долгу перед НароднымХазяйсвом. :-/

Что тут можно сказать? От части правда, отчасти нет..
Науку здорово познавать, когда реально у тебя есть время для этого - на очном обучении.. А если ты работаешь и работаешь много и хорошо, то тебе тяжело находить силы и время для изучения всего материала в семестре.. как в моём случаи.. Я бы с большой радостью взял и прочитал полтора килограммовую книгу по программированию в *nix.. но нет этой возможности.. а хватает время только для прочтения метод, статей, man и всё.. увы конечно.. да и при этом я не собираюсь идти работать в данном направлении, так как выбрал немного другое.. Так что, вам не стоит волноваться по этому поводу, а быть намного проще и снисходительней к людям.. ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "ударим автопробегом поколено"  
Сообщение от angra (ok) on 18-Ноя-08, 01:30 
Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы не желать помогать студентам без уважительных причин. И россказни про тяготы студенческой жизни и желание работать не по специальности в уважительных причинах для меня не числятся.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "ударим автопробегом поколено"  
Сообщение от Serega.M (ok) on 18-Ноя-08, 02:42 
>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы
>не желать помогать студентам без уважительных причин. И россказни про тяготы
>студенческой жизни и желание работать не по специальности в уважительных причинах
>для меня не числятся.

Я работаю и хочу работать по специальности (ПОИТ), просто не в окружении Unix.. ну, а то, что недоучка, так эт точно.. ещё три года впереди ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "ударим автопробегом поколено"  
Сообщение от Square (ok) on 21-Ноя-08, 16:42 
>>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся, чтобы
>>не желать помогать студентам без уважительных причин. И россказни про тяготы
>>студенческой жизни и желание работать не по специальности в уважительных причинах
>>для меня не числятся.
>
>Я работаю и хочу работать по специальности (ПОИТ), просто не в окружении
>Unix.. ну, а то, что недоучка, так эт точно.. ещё три
>года впереди ;)

Ну так учите матчасть ептыть...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

24. "ударим автопробегом поколено"  
Сообщение от Serega.M (ok) on 23-Ноя-08, 00:42 
>Ну так учите матчасть ептыть...

Учим, учим.. три самолёта на моём счету ;)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "ударим автопробегом поколено"  
Сообщение от Square (ok) on 21-Ноя-08, 16:41 
>Лично мне достаточно факта существования врачей-недоучек и возможности с ними столкнутся,

Это вааще пипеец... После того как ввели заочную форму обучения для хирургов и стоматологов - страшно подумать какой вопрос на форуме такие "спецы" могут задать...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру