Санкт–Петербургский Государственный Политехнический Университет
Факультет Технической Кибернетики
Кафедра Автоматики и Вычислительной Техники
ОТЧЕТ
О лабораторной работе
Дисциплина: СПО
Тема: Средства межпроцессорного взаимодействия
Выполнил студент группы 4081/1
Журавлев А.В.
Руководитель:
Душутина Е.В.
Санкт-Петербург
2009
Содержание:
1) Цель работы 3
2) Ненадежные сигналы 3
3) Надежные сигналы 7
4) Надежные сигналы. Модификация 9
5) Неименованные каналы 10
6) Именованные каналы 12
1. Цель работы:
Изучить следующие средства межпроцессорного взаимодействия (IPC) в ОС QNX:
1) надежные и ненадежные сигналы
2) именованные и неименованные каналы
3) очереди сообщений
4) семафоры и разделяемая память
Пункты 3 и 4 в данном отчете рассмотрены не будут в связи с трудоемкостью подбора аналога функций прилагаемой к отчету программы.
2. Ненадежные сигналы
Целью данного пункта является изучение ненадежного принципа обмена сигналами между процессами и запускающим их терминалом. Для этого были разработаны 2 программы: son.c и father.c (текст приведен в листингах ниже).
#ifndef _head_er_h_
#define _head_er_h_
#include <signal.h>
#include <stdio.h>
struct i_info {
int pid_father;
int ppid_father;
int pid_son;
} si;
#endif
Листинг 2.1. Файл Header.h
В родительском процессе получить PID сына можно разными способами, одним из которых является – занесение его в структуру верхнего уровня, к которой будет иметь доступ и родитель и потомок. Т.к. во многих частях кода используется вызов вида getpid() или getppid(), эти значение так же вынесены в общедоступную структуру для, своего рода, унификации кода.
#include "header.h"
void hndl_usr1_son(int nomer) {
printf("Son: I caught #%i\n\nSon: sending a signal to father\n",nomer);
kill(si.pid_father,SIGUSR2);
};
void hndl_usr2_son(int nomer) {
printf("Son: kawai family ^^\n");
};
int main( void )
{
int i;
si.pid_son = getpid();
printf("Son: My PID is %i\n",si.pid_son);
signal(SIGUSR1,hndl_usr1_son);
signal(SIGUSR2,hndl_usr2_son);
int flag = kill(si.pid_father,SIGUSR1);
if(flag == -1) {
printf("Son: I can't send a signal\n");
exit(1);
} else {
printf("SON: Signal was successfully send!\n");
};
pause();
pause();
printf("Son: end\n");
si.pid_son = -1;
return 0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.