Kniga-Online.club
» » » » Операционная система UNIX - Робачевский Андрей Михайлович

Операционная система UNIX - Робачевский Андрей Михайлович

Читать бесплатно Операционная система UNIX - Робачевский Андрей Михайлович. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
Клиент:

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

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

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

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

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

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

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

Перейти на страницу:

Робачевский Андрей Михайлович читать все книги автора по порядку

Робачевский Андрей Михайлович - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Операционная система UNIX, автор: Робачевский Андрей Михайлович. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*