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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Ниже приведены тексты программ сервера и клиента.

Сервер

#include

#include

#include

#include

#include

#include

#include

/* Номер порта сервера, известный клиентам */

#define PORTNUM 1500

main(argc, argv)

int argc;

char *argv[];

{

int s, ns;

int pid;

int nport;

struct sockaddr_in serv_addr, clnt_addr;

struct hostent* hp;

char buf[80], hname[80];

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

к сетевому формату */

nport = PORTNUM;

nport = htons((u_short)nport);

/* Создадим сокет, использующий протокол TCP */

if ((s=socket(AF_INET, SOCK_STREAM, 0))==-1) {

perror("Ошибка вызова socket()");

exit(1);

}

/* Зададим адрес коммуникационного узла */

bzero(&serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv.addr.sin_port = nport;

/* Свяжем сокет с этим адресом */

if (bind(s, struct sockaddr*)&serv_addr,

sizeof(serv_addr))==-1) {

perror("Ошибка вызова bind()");

exit(1);

}

/* Выведем сообщение с указанием адреса сервера */

fprintf(stderr, "Сервер готов: %s\n",

inet_ntoa(serv_addr.sin_addr));

/* Сервер готов принимать запросы

на установление соединения.

Максимальное число запросов, ожидающих обработки – 5.

Как правило, этого числа достаточно, чтобы успеть

выполнить accept(2) и породить дочерний процесс */

if (listen(s, 5)==-1) {

perror("Ошибка вызова listen()");

exit(1);

}

/* Бесконечный цикл получения запросов и их обработки */

while (1) {

int addrlen;

bzero(&clnt_addr, sizeof(clnt_addr));

addrlen = sizeof(clnt_addr);

/* Примем запрос. Новый сокет ns становится

коммуникационным узлом созданного виртуального канала */

if ((ns=accept(s, (struct sockaddr*)&clnt_addr,

&addrlen))==-1) {

perror("Ошибка вызова accept()");

exit(1);

}

/* Выведем информацию о клиенте */

fprintf(stderr, "Клиент = %s\n",

inet_ntoa(clnt_addr.sin_addr));

/* Создадим процесс для работы с клиентом */

if ((pid=fork())==-1) {

perror("Ошибка вызова fork()");

exit(1);

}

if (pid==0) {

int nbytes;

int fout;

/* Дочерний процесс: этот сокет нам не нужен. Он

по-прежнему используется для получения запросов */

close(s);

/* Получим сообщение от клиента и передадим его обратно */

while ((nbytes = recv(ns, buf, sizeof(buf), 0)) !=0) {

send(ns, buf, sizeof(buf), 0);

}

close(ns);

exit(0);

}

/* Родительский процесс: этот сокет нам не нужен. Он

используется дочерним процессом для обмена данными */

close(ns);

}

}

Клиент

#include

#include

#include

#include

#include

#include

#include

/* Номер порта, который обслуживается сервером */

#define PORTNUM 1500

main (argc, argv)

char *argv[];

int argc;

{

int s;

int pid;

int i, j;

struct sockaddr_in serv_addr;

struct hostent *hp;

char buf[80]="Hello, World!";

/* В качестве аргумента клиенту передается доменное имя

хоста, на котором запущен сервер. Произведем трансляцию

доменного имени в адрес */

if ((hp = gethostbyname(argv[1])) == 0) {

perror("Ошибка вызова gethostbyname()");

exit(3);

}

bzero(&serv_addr, sizeof(serv_addr));

bcopy(hp->h_addr, &serv_addr.sin_addr, hp->h_length);

serv_addr.sin_family = hp->h_addrtype;

serv_addr.sin_port = htons(PORTNUM);

/* Создадим сокет */

if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror("Ошибка вызова socket!)");

exit(1);

}

fprintf(stderr, "Адрес клиента: %s\n",

inet_ntoa(serv_addr.sin_addr));

/* Создадим виртуальный канал */

if (connect (s, (struct sockaddr*)&serv_addr,

sizeof(serv_addr)) == -1) {

perror("Ошибка вызова connect()");

exit(1);

}

/* Отправим серверу сообщение и получим его обратно */

send(s, buf, sizeof(buf), 0);

if (recv(s, buf, sizeof(buf) , 0) < 0) {

perror("Ошибка вызова recv()");

exit(1);

}

/* Выведем полученное сообщение на экран */

printf("Получено от сервера: %s\n", buf);

close(s);

printf("Клиент завершил работу \n\n");

}

Программный интерфейс TLI

При обсуждении реализации сетевой поддержки в BSD UNIX был рассмотрен программный интерфейс доступа к сетевым ресурсам, основанный на сокетах. В данном разделе описан интерфейс транспортного уровня (Transport Layer Interface, TLI), который обеспечивает взаимодействие прикладных программ с транспортными протоколами.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x