Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 20:34   #1
Voronar
Пользователь
 
Регистрация: 09.06.2012
Сообщений: 32
По умолчанию Семафоры для межпрограммного взаимодействия

Здравствуйте, уважаемые форумчане.

Передо мной стоит следующая задача:
Первая программа формирует специальный пакет и отправляет его по сети не важно куда.
Вторая программа должна в процессе выполнения первой менять содержимое пакета первой программы по моему запросу.
Решил воспользоваться shmget для использования общей памяти, а для синхронизации программ(потоков(процессов)) semget семафорами.
С последними не могу разобраться.

Хочу реализовать следующую логику:
Запускается первая программа, формируется пакет, создается общий семафор с изначальным положительным значением и начинается циклическая отправка пакета. В это время я запуская вторую программу, ставлю семафор в отрицательное значение(первая программа останавливается) и меняю содержимое пакета из общей с первой программой памяти. После этого переключаю семафор на положительное значение и первая программа продолжает передачу пакета.

Вот примерный код для семафора в первой программе:

Код:
//собрали пакет


sembuf buf;
key = ftok(FTOK_FILE, 1);
semid = semget(key, 1, 0666|IPC_CREAT);

buf.sem_op = 1;
semop(semid, (struct sembuf*) buf, 1);

//начинаем отправку
Вот примерный код для семафора во второй программе:


Код:
sembuf buf;
key = ftok(FTOK_FILE, 1);
semid = semget(key, 1, 0666);

buf.sem_op = -1;
semop(semid, (struct sembuf*) buf, 1); //останавливаем первую программу

//изменяем содержимое пакета

buf.sem_op = 1;
semop(semid, (struct sembuf*) buf, 1); //передача возобновляется
Не пойму вот что:
Я создаю семафор именно для процесса первой программы и остановится именно она?
Ещё вопрос про 2 семафора. Если я создам 2 семафора, то как привязать конкретный семафор к конкретной программе? Как это указывается в коде?

Заранее благодарен.
Voronar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Семафоры - как с ними работать? Mixim Общие вопросы .NET 2 22.10.2012 15:49
Вывол таблицы умножения. Семафоры [Delphi] StudeHt Помощь студентам 0 27.12.2011 20:15
Обмен данными между процессами. Но вопрос по семафоры :) RAZOR1703 Win Api 8 28.11.2011 21:37
Семафоры, философы. kir_rik Помощь студентам 0 12.04.2010 14:17
семафоры на С Raptor Помощь студентам 1 26.04.2008 18:30