Mir-knigi.online
Книги онлайн читать бесплатно!
  • Главная
  • Жанры
  • ТОП книг
  • ТОП авторов
  • Контакты

Операционная система UNIX

Часть 85 из 155 Информация о книге
Клиент:

#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), описывающее набор обозначенных характеристик взаимодействия.

Для обозначения коммуникационного узла, обеспечивающего прием и передачу данных для объекта (процесса), был предложен специальный объект — сокет (socket). Сокеты создаются в рамках определенного коммуникационного домена, подобно тому как файлы создаются в рамках файловой системы. Сокеты имеют соответствующий интерфейс доступа в файловой системе UNIX, и так же как обычные файлы, адресуются некоторым целым числом — дескриптором. Однако в отличие от обычных файлов, сокеты представляют собой виртуальный объект, который существует, пока на него ссылается хотя бы один из процессов.

Во-вторых, коммуникационные характеристики взаимодействия должны быть доступны процессам в некоторой унифицированной форме. Другими словами, приложение должно иметь возможность затребовать определенный тип связи, например, основанный на виртуальном канале (virtual circuit) или датаграммах (datagram), причем эти типы должны быть согласованы для всех коммуникационных доменов. Все сокеты условно можно разделить на несколько типов, в зависимости от предоставляемых коммуникационных характеристик. Полный набор этих характеристик включает:

□ Упорядоченную доставку данных

□ Отсутствие дублирования данных

□ Надежную доставку данных

□ Сохранение границ сообщений

□ Поддержку передачи экстренных сообщений

□ Предварительное установление соединения


Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело
  • Деловая литература
  • Детективы и триллеры
  • Детские
  • Детские книги
  • Документальная литература
  • Дом и дача
  • Дом и Семья
  • Жанр не определен
  • Зарубежная литература
  • Знания и навыки
  • История
  • Компьютеры и Интернет
  • Легкое чтение
  • Любовные романы
  • Научно-образовательная
  • Образование
  • Поэзия и драматургия
  • Приключения
  • Проза
  • Прочее
  • Психология и мотивация
  • Публицистика и периодические издания
  • Религия и духовность
  • Родителям
  • Серьезное чтение
  • Спорт, здоровье и красота
  • Справочная литература
  • Старинная литература
  • Техника
  • Фантастика и фентези
  • Фольклор
  • Хобби и досуг
  • Юмор
Mir-knigi.online

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • [email protected]
Информация
  • Карта сайта
© mir-knigi.online, 2026. | Вход