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

Здесь есть возможность читать онлайн «Андрей Робачевский - Операционная система UNIX» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 1997, ISBN: 1997, Издательство: BHV - Санкт-Петербург, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Операционная система UNIX: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Операционная система UNIX»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей

Операционная система UNIX — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Операционная система UNIX», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#include

#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),

PERM | IPC_CREAT)) < 0) {

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

exit(1);

}

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

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

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

exit(1);

}

/* Создадим группу из двух семафоров:

Первый семафор - для синхронизации работы

с разделяемой памятью. Второй семафор -

для синхронизации выполнения процессов */

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

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

exit(1);

}

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

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

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

exit(1);

}

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

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

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

#include

#include

#include

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Операционная система UNIX»

Представляем Вашему вниманию похожие книги на «Операционная система UNIX» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Операционная система UNIX» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x