Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MOS-labs-3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
655.36 Кб
Скачать

Послідовність дій

Цей приклад в значній мірі схожий на програму з застосуванням очікування блокування, з невеликими відмінностями Перша відмінність, яка впадає в очі, - тут використаний новий тип даних, pthread_cond__t. Це просто декларація для умовної змінної; ми назвали нашу умовну змінну condvar.

Наступне, що видно з прикладу, - це те, що структура «споживача» ідентична такій в попередньому прикладі очікуванням блокуванням.

Основна відмінність тут полягає в тому, що бібліотека очікувань блокувань має прихований внутрішній мутекс, а при використанні умовних змінних мутекс передається явно. Останній спосіб дає нам більше гнучкості.

І, нарешті, зверніть увагу на те, що ми використовували функцію pthread_cond_signal() (знову ж, з явною передачею мутекс).

Результати

# root/a.out

Start

Eto potrebitel

W1

W2

Eto ptoizvoditel

ptoizvoditel polychil dannie ot h/w = 0

Wp1

Wp3

W3

dannie ot proizv = 1

W1

W2

ptoizvoditel polychil dannie ot h/w = 1

Wp1

Wp3

W3

dannie ot proizv = 2

W1

W2

ptoizvoditel polychil dannie ot h/w = 2

Wp1

Wp3

W3

dannie ot proizv = 3

W1

W2

ptoizvoditel polychil dannie ot h/w = 3

Wp1

Wp3

W3

dannie ot proizv = 4

W1

W2

Лабораторна робота № 8. Створення найпростішого сервера в ос qnx

Мета роботи: Написати програму, що створює найпростіший Web-сервер.

Короткі теоретичні відомості Функція Socket

Для створення сокета використовується системний виклик socket.

s = socket (domain, type, protocol);

Цей виклик грунтується на інформації про комунікаційний домен і тип сокета. Для використання особливостей Internet, значення параметрів повинні бути наступними:

  • communication domain - AF_INET (Internet протоколи).

  • type of the socket - SOCK_STREAM (цей тип забезпечує послідовний, надійний, орієнтований на встановлення двостороннього зв'язку потік байтів).

Функція socket створює кінцеву точку для комунікацій і повертає файловий дескриптор, який посилається на сокет, або -1 у випадку помилки. Даний дескриптор використовується надалі для встановлення зв'язку. Для створення сокета типу stream з протоколом TCP, що забезпечує комунікаційну підтримку, виклик функції socket повинен бути наступним:

s = socket (AF_INET, SOCK_STREAM, 0);

Функція Bind

Сокет створюється без імені. Поки з сокетом не буде пов'язане ім'я, віддалені процеси не мають можливості посилатися на нього і, отже, на даному сокеті не може бути отримано жодних повідомлень. Комунікаційні процеси використовують для даних цілей асоціації. В Internet домені асоціація складається з локальної і віддаленої адреси і з локального і віддаленого порту. У більшості доменів асоціація повинна бути унікальною. В Internet домені зв'язування сокета і імені може бути вельми складним, але, на щастя, зазвичай немає необхідності спеціально прив'язувати адресу і номер порту до сокета, так як функції connect і send автоматично зв'яжуть даний сокет з відповідною адресою, якщо це не було зроблено до їх виклику. Для зв'язування сокета з адресою і номером порту використовують системний виклик bind:

bind (s, name, namelen);

Прив'язка імені (name) - це рядок байт змінної довжини, що інтерпретується підтримуваним протоколом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]