- •Загальні вказівки до виконання лабораторних робіт
- •Лабораторна робота № 1-3 програмування в windows script host
- •1 Основні теоретичні відомості
- •Виконання основних операцій з файловою системою
- •2 Порядок виконання роботи
- •3 Контрольні запитання
- •Лабораторна робота № 4 основи роботи з операційною системою unix
- •1 Основні теоретичні відомості
- •2 Порядок виконання роботи
- •3 Контрольні питання
- •Лабораторна робота № 5 керування процесами
- •1 Основні теоретичні відомості
- •2 Порядок виконання роботи
- •3 Контрольні запитання
- •Лабораторна робота № 6 права доступу в операційній системі unix
- •1 Основні теоретичні відомості
- •2 Порядок виконання роботи
- •3 Контрольні питання
- •Лабораторна робота № 7 взаємодія процесів в ос unix за допомогою іменованих каналів
- •1 Основні теоретичні відомості
- •2 Порядок виконання роботи
- •3 Контрольні запитання
- •Перелік рекомендованих джерел
2 Порядок виконання роботи
1 Підімкніться до комп’ютера під керуванням ОС UNIX за допомогою telnet (“Пуск\Виконати\telnet ip”, де ip — адреса машини під керуванням UNIX).
2 Після підімкнення введіть ім’я (login) та пароль (password).
3 Створіть текстові файли serverfifo.c та clientfifo.c у редакторі ее.
Для цього треба набрати:
ee serverfifo.c на першому терміналі
ee clientfifo.c на другому терміналі
Для збереження треба натиснути Esc + Enter.
Вихідні тексти цих файлів наступний:
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);
}
}
}
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);
}
4 Відкомпілюйте програми:
cc -o serverfifo serverfifo.c
cc -o clientfifo clientfifo.c
5 У разі успішної компілювання на першому терміналі командою ls -1 можна спостерігати з’явлення виконуваного файла ./serverfifo, а на другому — ./clientfifo.
6 Перевірте результати роботи програм; у разі з’явлення повідомлень про помилки, поясніть їх та усуньте, після чого знову запустіть програми та отримайте позитивний результат — з’явлення на терміналі сервера Ваших прізвища, ім’я та по-батькові.
7 Змоделюйте ситуації, коли неможливо створити, відкрити та вилучити FIFO, а також коли виникає помилка виведення та записування, потім знову налаштуйте програми та виконайте їх.