- •Лабораторна робота № 15 взаємодія процесів в ос unix за допомогою іменованих каналів
- •1 Мета роботи
- •2 Основні положення
- •2.1 Способи забезпечення взаємодії процесів в ос unix
- •2.2 Взаємодія поміж процесами за допомогою іменованих каналів
- •2.3 Функції та системні виклики ос unix,
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Взаємодія процесів в ос unix за допомогою інтерфейсу сокетів
- •1 Мета роботи
- •2 Основні положення
- •2.1 Загальні вимоги до міжпроцесної взаємодії
- •2.2 Програмний інтерфейс сокетів
- •2.3 Приклад використання сокета
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Лабораторна робота № 18
- •2.1 Утиліта ping
- •2.2 Програма traceroute
- •2.3 Програма ttcp
- •2.4 Програма tcpdump
- •2.5 Програма netstat
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Створення системи обліку трафіка
- •1 Мета роботи
- •2 Ключові положення
- •2.1 Принципи обліку трафіка
- •2.2 Мова програмування Shell
- •2.2.1 Структура команд
- •2.2.2. Структура команд
- •2.2.3 Групування команд
- •2.2.4 Переспрямовування команд
- •2.3 Брандмауер firewall
- •2.3.1 Можливості ipfw
- •2.3.2 Формат правил ipfw
- •2.4 Мова програмування awk
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Тексти програм serverfifo та clientfifo
- •Тексти програм socketserver та socketclient
- •Тексти програм servertcp та clienttcp
- •Тексти програм simpletcpserv та simpletcpclient
- •Лістинг програми обліку трафіку
7 Список рекомендованої літератури
1 Робачевский А. М. Операционная система UNIX. — СПб.: БХВ-Петербург, 2002.
2 Ивановский С. Операционная система UNIX. — М.: Познавательная книга плюс, 2000.
3 Дегтярев Е. К. Введение в UNIX. — М.: МП "Память", 1991.
4 Снейдер И. Эффективное программирование TCP/IP. СПб.: Питер, 2002.
5 http://www.freebsd.org.ru
6 http://www.anriintern.com/computer/freebsd/
7 http://www.opennet.ru
ДОДАТОК А
Тексти програм serverfifo та clientfifo
Лістинг 1
serverfifo:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define FIFO "/fifo.1"
#define MAXBUF 80
main()
{
int readfd, n;
char buff[MAXBUF];
if(mkfifo(FIFO, 0777) < 0){
printf("Nemozhlyvo stvoryty FIFO\n");
exit(1);
}
if((readfd = open(FIFO, O_RDONLY)) < 0){
printf("Nemozhlyvo vidkryty FIFO\n");
exit(1);
}
while((n = read(readfd, buff, MAXBUF)) > 0)
if(write(1, buff, n) != n){
printf("Pomylka vyvodu\n");
exit(1);
}
close(readfd);
exit(0);
}
Лістинг 2
clientfifo:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define FIFO "/fifo.1"
main()
{
int writefd,n;
if((writefd = open(FIFO, O_WRONLY))<0) {
printf("Nemozhlyvo vidkryty FIFO\n");
exit(1);
}
if(write(writefd,"Dobryj denj, Svite!\n",21)!=21){
printf("Pomylka zapysu\n");
exit(1);
}
close(writefd);
if(unlink(FIFO) <0){
printf("Nemozhlyvo vyluchyty FIFO\n");
exit(1);
}
exit(0);
}
ДОДАТОК Б
Тексти програм socketserver та socketclient
Лістинг 1
socketserver:
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#define MAXBUF 256
#define FILE "echo.serv"
char buf[MAXBUF];
main()
{
struct sockaddr_un serv_addr, clnt_addr;
int sockfd;
int saddrlen, caddrlen, max_caddrlen, n;
if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0){
printf("Nemozhlyvo stvoryty socket\n");
exit(1);
}
unlink(FILE);
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path, FILE);
saddrlen=sizeof(serv_addr.sun_family)+strlen(serv_addr.sun_path);
if(bind(sockfd, (struct sockaddr*)&serv_addr, saddrlen) < 0){
printf("Pomylka svyazuvannya socketa z adresoyu\n");
exit(1);
}
max_caddrlen = sizeof(clnt_addr);
for(;;){
caddrlen = max_caddrlen;
n = recvfrom(sockfd, buf, MAXBUF, 0, (struct sockaddr*)&clnt_addr, &caddrlen);
if(n < 0){
printf("Pomylka pryjmannya\n");
exit(1);
}
if(sendto(sockfd, buf, n, 0, (struct sockaddr*)&clnt_addr, caddrlen) !=n){
printf("Pomylka peredavannya\n");
exit(1);
}
}
}
Лістинг 2
socketclient:
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#define MAXBUF 256
#define FILE "echo.serv"
#define NULL 0
char *msg = "Hello world!";
char buf[MAXBUF];
main()
{
struct sockaddr_un serv_addr, clnt_addr;
int sockfd;
int saddrlen, caddrlen, msglen, n;
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path, FILE);
saddrlen=sizeof(serv_addr.sun_family)+strlen(serv_addr.sun_path);
if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0){
printf("Nemozhlyvo stvoryty' socket\n");
exit(1);
}
bzero(&clnt_addr, sizeof(clnt_addr));
clnt_addr.sun_family = AF_UNIX;
strcpy(clnt_addr.sun_path, FILE);
mktemp(clnt_addr.sun_path);
caddrlen=sizeof(clnt_addr.sun_family)+strlen(clnt_addr.sun_path);
if(bind(sockfd, (struct sockaddr*)&clnt_addr, caddrlen) < 0){
printf("Pomylka svyazuvannya socketa\n");
exit(1);
}
msglen = strlen(msg);
if(sendto(sockfd, msg, msglen, 0, (struct sockaddr*)&serv_addr, saddrlen) != msglen){
printf("Pomylka peredavannya povidomlennya\n");
exit(1);
}
if((n = recvfrom(sockfd, buf, MAXBUF, 0, NULL, 0)) < 0){
printf("Pomylka otrymannya povidomlennya\n");
exit(1);
}
printf("Echo: %s\n", buf);
close(sockfd);
unlink(clnt_addr.sun_path);
exit(0);
}
ДОДАТОК В