Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структура найпростішого клієнтаСодержание книги
Поиск на нашем сайте
Приклад луна-клієнта, що відсилає серверу дані, введені із клавіатури, і відображає все отримане у відповідь, наведено нижче. Сокет і виклик connecte) створюються стандартним способом. Обмін даними відбувається в нескінченному циклі (для виходу потрібно ввести рядок "вихід", після чого з'єднання буде коректно закрите). Зазначимо, що для простоти весь код повного отримання даних наведено тільки для recv():
// sockfd = sockete...), connecttsockfd....) for (;;) { fgetstbuf. sizeof(buf), stdin); if (strcmptbuf, "вихід\п") — 0) break; stdin_read = strlen(buf); send(sockfd. buf. stdin_read. 0); for (pos - 0; pos < stdin_read; pos += net_read) netread = recv(sockfd. &buf[pos]. stdinread - pos. 0): printfC'eifl сервера отримано: %s", buf); } -• i tfwbwaw»,. Ш: ї9п close(sockfd);
Структура найпростішого багатопотокового сервера Розглянемо, як можна вирішити проблему ітеративного сервера відповідно до підходів, описаних у розділі 15. У цьому розділі зупинимося на розробці найпростішого багатопотокового сервера, а у розділі 16.4.4 — на введенні-виведенні з повідомленням на базі виклику selecto. Відмінності для багатопотокової реалізації фактично торкнуться тільки основного циклу сервера. У ньому необхідно приймати з'єднання і створювати для його обробки окремий потік у неприєднаному стані (замість очікування завершення його виконання, потрібно очікувати нових з'єднань). Дескриптор сокета передають як параметр у функцію потоку.
for(:;) { connfd = accept(Iistenfd....); pthread_attr_i ni t(&att r); pthread_attr_setdetachstate(&attr. PTHREADCREATEDETACHED): pthread_create(&tid. &attr. &process_request. (void *) connfd); }
Функція потоку перетворює параметр до цілочислового типу, виконує обмін даними із клієнтом і закриває сокет з'єднання:
void *process_request(void *data) { int connfd = (int) data; //... обмін даними із клієнтом через connfd close(connfd);
Введення-виведення з повідомленням
Системний виклик selecto
У розділі 15.5.3 ішлося про особливості введення-виведення із повідомленням і загальні принципи використання системного виклику selecto. Зараз наведемо приклад використання selecto для повідомлення про стан сокетів у реалізації вже відомого луна-сервера. Насамперед зауважимо, що select() в UNIX працює з усіма файловими дескрипторами, доступними для процесу (серед них можуть бути дескриптори сокетів). Ці дескриптори, як зазначалося в розділі 13, - цілі числа із послідовною нумерацією від нуля. Таке відображення визначає низку особливостей використання виклику selecto. Опишемо синтаксис select О:
#іпсіude <sys/select.h> #include <sys/time.h> int select(int fdcount. fdset *readset. fd_set *writeset. fd_set *exceptset, const struct timeval *timeout); де: fdcount — кількість дескрипторів, зміну стану яких потрібно відстежувати (оскільки дескриптори нумеруються від нуля, це число дорівнює максимальному номеру дескриптора плюс один);
Розділ 19 Завантаження операційних систем
♦ Загальні принципи організацГі' процесу завантаження ♦ Процес завантаження Linux і Windows ХР
Завантаження операційної системи — складний процес, що стосується більшості підсистем ОС. Його повне розуміння неможливе без наявності базових знань про структуру різних компонентів системи.
Загальні принципи завантаження ОС
Тут зробимо короткий огляд загальних принципів організації завантаження операційних систем. Основну увагу буде приділено апаратній ініціалізації комп'ютера і принципам реалізації завантажувача ОС. Подальші етапи завантаження опишемо коротко, докладніше їх буде розглянуто на прикладах у розділах, присвячених завантаженню Linux і Windows ХР.
|
||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 155; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.240.14 (0.006 с.) |