Чтение онлайн

на главную - закладки

Жанры

Шрифт:

 /* Ждем, пока клиент закончит запись в разделяемую память

и освободит ее. После этого заблокируем ее */

 if (semop(semid, &mem_lock[0], 2) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

 }

 /* Выведем сообщение на терминал */

 printf(%s, msgptr->buff);

 /* Освободим
разделяемую память */

 if (semop(semid, &mem_unlock[0], 1) < 0 {

printf("Невозможно выполнить операцию\n");

exit(1);

 }

 /* Отключимся от области */

 if (shmdt(msgptr) < 0) {

printf("Ошибка отключения\n");

exit(1);

 }

 /* Всю остальную работу по удалению объектов сделает клиент */

 exit(0);

}

Клиент:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <sys/shm.h>

#include "shmem.h"

main {

 Message *msgptr;

 key_t key;

 int shmid, semid;

 /* Получим ключ. Один и тот же ключ можно использовать как

для семафора, так и для разделяемой памяти */

 if ((key = ftok("server", 'A')) < 0) {

printf("Невозможно получить ключ\n");

exit(1);

 }

 /* Получим доступ к разделяемой памяти */

 if ((shmid = shmget(key, sizeof(Message), 0)) < 0) {

printf("Ошибка доступа\n");

exit(1);

 }

 /* Присоединим ее */

 if ((msgptr = (Message*)shmat(shmid, 0, 0)) < 0) {

prinf("Ошибка присоединения\n);

exit(1);

 }

 /* Получим доступ к семафору */

 if ((semid = semget(key, 2, PERM)) < 0) {

printf("Ошибка доступа\n");

exit(1);

 }

 /* Заблокируем разделяемую память */

 if (semop(semid, &mem_lock[0], 2) < 0) {

printf("Невозможно
выполнить операцию\n");

exit(1);

 }

 /* Уведомим сервер о начале работы */

 if (semop(semid, &proc_start[0], 1) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

 }

 /* Запишем в разделяемую память сообщение */

 sprintf(msgptr->buff, "Здравствуй, Мир!\n");

 /* Освободим разделяемую память */

 if (semop(semid, &mem_unlock[0], 1) < 0) {

printf("Невозможно выполнить операцию\n");

exit(1);

 }

 /* Ждем, пока сервер в свою очередь не освободит

разделяемую память */

 if (semop(semid, &mem_lock[0], 2) < 0) {

printf(Невозможно выполнить операцию\n");

exit(1);

 }

 /* Отключимся от области */

 if (shmdt(msgptr) < 0) {

printf("Ошибка отключения\n");

exit(1);

 }

 /* Удалим созданные объекты IPC */

 if (shmctl(shmid, IPC_RMID, 0) < 0) {

printf("Невозможно удалить область\n");

exit(1);

 }

 if (semctl(semid, 0, IPC_RMID) < 0) {

printf("Невозможно удалить семафор\n");

exit(1);

 }

 exit(0);

}

Межпроцессное взаимодействие в BSD UNIX. Сокеты

Разработчики системы межпроцессного взаимодействия BSD UNIX руководствовались рядом соображений:

Во-первых, взаимодействие между процессами должно быть унифицировано, независимо от того, выполняются ли они на одном компьютере или на разных хостах сети. Наиболее оптимальная реализация межпроцессного взаимодействия, удовлетворяющего этому требованию, должна иметь модульную структуру и базироваться на общей подсистеме поддержки сети UNIX. При этом могут быть использованы различные схемы адресации объектов, их расположение, протоколы передачи данных и т.д. В этой связи было введено понятие коммуникационный домен (communication domain), описывающее набор обозначенных характеристик взаимодействия.

Поделиться:
Популярные книги

Блуждающие огни 4

Панченко Андрей Алексеевич
4. Блуждающие огни
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Блуждающие огни 4

Я сделаю это сама

Кальк Салма
1. Магический XVIII век
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Я сделаю это сама

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Боярышня Дуняша

Меллер Юлия Викторовна
1. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Дуняша

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Леди для короля. Оборотная сторона короны

Воронцова Александра
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Невест так много. Дилогия

Завойчинская Милена
Невест так много
Любовные романы:
любовно-фантастические романы
7.62
рейтинг книги
Невест так много. Дилогия

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

Наследник павшего дома. Том I

Вайс Александр
1. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том I

Крещение огнем

Сапковский Анджей
5. Ведьмак
Фантастика:
фэнтези
9.40
рейтинг книги
Крещение огнем

Камень Книга двенадцатая

Минин Станислав
12. Камень
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Камень Книга двенадцатая