Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270

Надежные и ненадежные сигналы

21.04.2015, 23:03. Показов 2088. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание с НЕнадежными сигналами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <wait.h>
#include <signal.h>
 
using namespace std;
 
void theend (int sig)
{
cout << "Exit" << endl;
exit (0);
}
 
int proverkastepeni (int n)
{
return !(n&(n-1));
}
 
int main ()
{
int fd[2]; // для получение дескрипторов
double s=0, s1=0, s2=0, s3=0; // для получение и передачи данн
int a0,a, b;
if (pipe(fd)<0)
{
cout << "Ошибка создания канала!" << endl;
return 0;
}
cout << "Введите число A: " << endl;
cin >> a;
cout << "Введите число B: " << endl;
cin >> b;
if (a>b)
{
a0 = a;
a = b;
b = a0;
}
 
int death, dream;
cout << "Время жизни: " << endl;
cin >> death;
cout << "Время сна: " << endl;
cin >> dream;
(void)signal (SIGALRM, theend); // переопределяет реацию на сигнал
alarm (death); //сообщает через сколько нужно подать сигнал процессу выше (SIGALRM-сигнал тревоги)
 
if (fork() == 0) //порождение процесса
{
for (int i = a; i <= a+(b-a)/2; i++)
if (proverkastepeni(i))
s+=i;
write(fd[1],&s, sizeof(s)); // посылаем данные s через дескриптор для записи
return 1; // вовзр.размер в байтах
}
 
for (int i = (a+(b-a)/2)+1; i <= b; i++)
if (proverkastepeni(i))
s2+=i;
read (fd[0], &s, sizeof(s)); // читаем данные из канала через дескриптор для записи
s3 = s + s2;
 
 
 
sleep (dream);
kill (4045,9);
cout << "Ответ: " << s3 << endl;
 
close (fd[0]);
close (fd[1]);
return 0;
}

Задание с надежными сигналами:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <wait.h>
#include <signal.h>
 
using namespace std;
 
void theend (int sig)
{
cout << "Выход" << endl;
exit (0);
}
 
int proverkastepeni (int n)
{
return !(n&(n-1));
}
 
int main ()
{
int fd[2]; // для получение дескрипторов
double s=0, s1=0, s2=0, s3=0; // для получение и передачи данн
int a0,a, b;
if (pipe(fd)<0)
{
cout << "Ошибка создания канала!" << endl;
return 0;
}
cout << "Введите число A: " << endl;
cin >> a;
cout << "Введите число B: " << endl;
cin >> b;
if (a>b)
{
a0 = a;
a = b;
b = a0;
}
 
int death, dream;
cout << "Время жизни: " << endl;
cin >> death;
cout << "Время сна: " << endl;
cin >> dream;
struct sigaction act; // структура для обработки сигнала
act.sa_handler = theend; // обработчик - функция the end
sigemptyset(&act.sa_mask); // блокировка сигнала на время работы обработчика
act.sa_flags = 0;
sigaction (SIGALRM, &act, 0); //переопределение для сигнала(изменений действий процесса при получении соответствующего.сигнала) SUGALRM(сигнал тревоги) (0 - для того чтобы получть адрес текущего обработчика прерываний)
alarm (death);
 
if (fork() == 0) //порождение процесса
{
for (int i = a; i <= a+(b-a)/2; i++)
if (proverkastepeni(i))
s+=i;
write(fd[1],&s, sizeof(s)); // посылаем данные s через дескриптор для записи
return 1; // вовзр.размер в байтах
}
 
for (int i = (a+(b-a)/2)+1; i <= b; i++)
if (proverkastepeni(i))
s2+=i;
read (fd[0], &s, sizeof(s)); // читаем данные из канала через дескриптор для записи
s3 = s + s2;
 
sleep (dream);
 
cout << "Ответ: " << s3 << endl;
 
close (fd[0]);
close (fd[1]);
return 0;
}
Написал 2 программы. Не понимаю правильно они работают или нет
Делал все по примеру. Прошу проверить и по возможности подсказать принцип работы программ
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2015, 23:03
Ответы с готовыми решениями:

Что значат эти сигналы (vmware w, bios сигналы)?
Создаю машину с Kali, при запуске если стоит bios 1 длинный сигнал , если uefi 1 длинный и 1 короткий сигнал, XP ставится нормально, в чем...

Эти программы надежные?
Хотел проверить свой пк дополнительными программами. Нашел вот такие, хочу знать они нормальные, не хакерские, и не нанесут вред Пк моему? ...

Надежные компьютерные магазины в Москве.
Подскажите какие магазины хорошие есть в москве ? А то много раз сталкивался с тем что покупать бракованную деталь отдаю в по гарантии, мне...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2015, 23:03
Помогаю со студенческими работами здесь

Не удается безопасно подключиться к этой странице. Устаревшие или ненадежные параметры протокола TLS
Доброго времени суток. Собрал корешу максимально бюджетный комп на авито по кусочкам, всё проверил, всё вроде ок и работает. Пришел...

Сигналы
Здравствуйте. Помогите с ответом на несколько вопросов: 1. Что такое эффективная полоса частот сигнала? 2. Для чего нужно знать...

сигналы
Создается два процесса, которые обмениваются сигналами, по прошествии нескольких циклов обмена родительский процесс завершается и дочерний...

Сигналы
Здравствуйте!! Помогите пожалуйста с заданием!!! Нужно написать программу. В которой: 1)Процесс-отец пораждает 4 дочерних процесса,...

Сигналы
Здравствуйте!! Помогите пожалуйста с заданием!!! Нужно написать программу. В которой: 1)Процесс-отец пораждает 4 дочерних процесса,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru