Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Межмашинное соединение с помощью сокетов

КУРСОВА РОБОТА

з дисципліни

"UNIX"

 

Виконав: студент гр. ІН.сз-31

Безпалько Є.В.

 

 

Перевірив: Бабий М.С.

 

Варіант № 2

 

Суми 2014

Содержание:

 

 


1. Задание 1.................................................................................................................................................. 3

2. Задание 2.................................................................................................................................................. 6

Список литературы:.................................................................................................................................... 9



Задание 1

Написать программу на языке C++ для компилятора g++ системы UNIX, которая бы поддерживала следующие режимы:

- создание в домашнем каталоге файла с именем list и занесение в него нескольких записей следующего содержания: наименование компьютерной техники – строковый тип, количество – целый тип, цена – вещественный тип;

- найти в файле list компьютерное устройство с наиболее высокой ценой;

- Создать новый файл list1 из записей файла list, наименование техники в которых начинается с символа “К”.

При работе с файлами использовать файловые дескрипторы.

 

Основные файловые функции Unix

Для работы с файловой системой используются следующие функции:

 

int open (const char* path, int accesmode, int permission) - прототип функции находится в fcntl.h, path - путь, permission обычно 0.

Флаги режима доступа: О_RDONLY - для чтения, О_WRONLY - для записи, O_RDWR — для чтения и записи.

Существует также модификатор доступа, например O_CREAT - если файл не существует, он создается. Функция возвращает дескриптор файла или -1 при ошибке.

 

int create (const char* path, int accesmode) - упрощенный вариант создания файла.

 

long read (int fdesc, void* buf, int size) - читается блок данных из файла.

Прототип находится в unistd.h, fdesc - файловый дескриптор, buf - адрес буфера, содержащего прочитанные данные, size - количество байтов, которое нужно прочитать из файла. Функция возвращает количество прочитанных байтов.

 

long write (int fdesc, const void* buf, int size) - записывает блок данных в файл.

Прототип - в unistd.h, параметры как в read. Функция возвращает количество байтов, успешно записанных в файл.

 

long lseek (int fdesc, long pos, int whence) - изменяет текущую позицию указателя чтения-записи в файле. Прототип - в unistd.h, pos - задает смещение в байтах, которое должно быть прибавлено к базовому адресу для получения нового смещения. Параметр whence задает базовый адрес: SEEK_CUR - текущий адрес указателя в файле; SEEK_SET - начало файла; SEEK_END - конец файла. Функция возвращает смещение.

 

Код программы

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

#include <fcntl.h>

#include <string.h>

#define N 5

 

struct TComp

{

char* name[15];

int count;

float price;

} Comp, fcomp;

 

char* fname="list";

 

void make_file()

{

int f=open(fname, O_WRONLY|O_CREAT,0);

if (f==-1)

{

perror("Ошибка открытия файла");

exit (1);

}

for(int i=0; i<N; i++)

{

puts ("Введите наименование: ");

scanf("%s",&Comp.name);

puts("Введите количество и цену: ");

scanf("%i %f", &Comp.count, &Comp.price);

write(f, &Comp, sizeof(Comp));

printf("name=%s; count=%i; price=%f;\n", Comp.name, Comp.count, Comp.price);

}

close(f);

}

 

void max_price()

{

 

fcomp.price = 0;

int f1 = open(fname, O_RDONLY, 0);

if (f1==-1)

{

perror("Ошибка открытия файла");

exit (1);

}

while (read(f1, &Comp, sizeof(Comp)))

{

if (Comp.price > fcomp.price)

{

fcomp.name = Comp.name;

fcomp.count = Comp.count;

fcomp.price = Comp.price;

}

printf("%s price is %f.\n", Comp.name, Comp.price);

}

printf("Computer %s has maximum price of %f", fcomp.name, fcomp.price);

close(f1);

}

 

 

void prosmotr()

{

int f2=open(fname, O_RDONLY,0);

if (f2==-1)

{

perror("Ошибка открытия файла");

exit (1);

}

while (read(f2, &Comp, sizeof(Comp)))

{

printf("name=%s; count=%i; price=%f;\n", Comp.name, Comp.count, Comp.price);

}

close(f2);

}

 

void main()

{

int option;

 

puts("Выберите режим: ");

puts("1-создание файла; 2-поиск устройства с макс. ценой; 3-просмотр файла:");

scanf("%i", &option);

switch(option)

{

case 1: make_file(); break;

case 2: max_price(); break;

case 3: prosmotr(); break;

}

}

 


Задание 2

Написать клиентскую и серверную программы для обмена информацией через сокеты. При этом клиентская и серверная программы должны быть установлены на разных компьютерах и выполнять следующие действия:

- Клиент передает серверу строку символов.

- Сервер получает строку от клиента, запускает новый процесс и передает ему через неименованный программный канал полученную строку. Запущенный процесс подсчитывает количество символов в строке и выводит результат на экран.

Межмашинное соединение с помощью сокетов

 

Межмашинное соединение чаще всего реализуется с помощью сокетов.

Различают сокеты с установлением соединения и без установления соединения. В зависимости от того, к какому домену принадлежит гнездо, используются разные форматы адресов сокетов и базовые транспортные протоколы. При использовании сокетов используются следующие стандартные домены: AF_UNIX (формат адреса - путевое имя Unix) и AF_INET (формат адреса - хост-имя и номер порта).

Для каждого гнезда назначается тип, посредством которого определяется способ передачи данных между двумя сокетами. Если тип сокета - виртуальный канал, то данные передаются последовательно, с достаточной степенью надежности и не дублируются. Если тип сокета - дейтаграмма, то условие последовательности пересылки данных не выполняется и надежность их передачи низкая. Тип гнезда с установлением соединения - как правило, виртуальный канал, а тип гнезда без установления соединения — дейтаграмма. Дейтаграммные сокеты обычно работают быстрее, чем виртуальные каналы, и используются в приложениях, где быстродействие важнее, чем надежность.

Сокет каждого типа поддерживает один или несколько протоколов, однако в любой Unix-системе для любого сокета всегда указывается протокол по умолчанию. Протокол по умолчанию для виртуального канала - TCP, а для дейтаграммы -UDP.



<== предыдущая лекция | следующая лекция ==>
 | Рекомендации по разработке производственной программы
Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 253 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2313 - | 2041 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.