Здравствуйте, уважаемые форумчане.
Передо мной стоит следующая задача:
Первая программа формирует специальный пакет и отправляет его по сети не важно куда.
Вторая программа должна в процессе выполнения первой менять содержимое пакета первой программы по моему запросу.
Решил воспользоваться 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 семафора, то как привязать конкретный семафор к конкретной программе? Как это указывается в коде?
Заранее благодарен.