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

Вывод полного произведения

20.12.2021, 18:03. Показов 2585. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, такой вопрос назрел
нужно написать программу которая при помощи очереди сообщений посчитает сумму и произведение 5 чисел.
Родитель передает потомку 5 чисел, а потомок их считает и возвращает родителю. Проблема в том что потомок все считает нормально, но при передаче результатов родителю почему то обрезает произведение. Как это починить?

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <mqueue.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <math.h>
#include <string.h>
#define FIRST_QUEUE "/first_queue"
#define SECOND_QUEUE "/second_queue"
 
char *my_itoa(int num, char *str)
 
{
 
if (str == NULL)
 
{
 
return NULL;
 
}
 
sprintf(str, "%d", num);
 
return str;
 
}
 
int main()
 
{
 
pid_t pid;
 
mqd_t mq, mqr, mqrr;
 
int sum = 0, a = 0, b = 0, c = 0, d = 0, z = 0;
 
int multiple = 1;
 
int digit;
 
int size = sizeof(int);
 
struct mq_attr attr;
 
char buffer[256];
 
char temp[8];
 
int must_stop = 0;
 
attr.mq_flags = 0;
 
attr.mq_maxmsg = 10;
 
attr.mq_msgsize = sizeof(int);
 
attr.mq_curmsgs = 0;
 
mq_open(FIRST_QUEUE, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &attr);
 
mq_open(SECOND_QUEUE, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &attr);
 
switch (pid = fork())
 
{
 
case -1:
 
printf(" Ошибка!\n");
 
exit(1);
 
case 0:
 
sleep(15);
 
printf(" Дочерний процесс запущен!\n");
 
printf(" PID Дочернего процесса -- %d\n", getpid());
 
printf(" PID Родительского процесса текущего потомка -- %d\n", getppid());
 
mqr = mq_open(FIRST_QUEUE, O_RDONLY);
 
for (int i = 0; i < 5; i++)
 
{
 
mq_receive(mqr, buffer, size, NULL);
 
printf(" Число получено потомком-- %d\n", atoi(buffer));
 
sum += atoi(buffer);
 
switch (i)
 
{
 
case 0:
 
a = atoi(buffer);
 
break;
 
case 1:
 
b = atoi(buffer);
 
break;
 
case 2:
 
c = atoi(buffer);
 
break;
 
case 3:
 
d = atoi(buffer);
 
break;
 
case 4:
 
z = atoi(buffer);
 
break;
 
}
 
}
 
printf(" Потомок нашел сумму чисел -- %d\n", sum);
 
int p = sum;
 
int multiple = a * b * c * d * z;
 
printf(" Потомок нашел произведение чисел -- %d\n", multiple);
 
mq_close(mqr);
 
mqr = mq_open(SECOND_QUEUE, O_WRONLY);
 
mq_send(mqr, my_itoa(sum, buffer), size, 0);
 
mq_send(mqr, my_itoa(multiple, buffer), size, 0);
 
mq_close(mqr);
 
printf(" Дочерний процесс завершил работу\n");
 
exit(0);
 
default:
 
printf("Запущен родительский процесс!\n");
 
printf("PID текущего родительского процесса-- %d\n", getpid());
 
printf("PID потомка текущего процесса %d\n", pid);
 
mqrr = mq_open(FIRST_QUEUE, O_WRONLY);
 
for (int i = 0; i < 5; i++)
 
{
 
printf("Введите случайное число -- \n");
 
scanf("%i", &digit);
 
mq_send(mqrr, my_itoa(digit, buffer), size, 0);
 
printf("Родитель передал число %d\n", digit);
 
sleep(1);
 
}
 
mq_close(mqrr);
 
printf("Запуск дочернего процесса\n");
 
mqr = mq_open(SECOND_QUEUE, O_RDONLY);
 
mq_receive(mqr, buffer, 5, NULL);
 
printf("Родитель получил сумму чисел -- %d\n", atoi(buffer));
 
mq_receive(mqr, buffer, 10, NULL);
 
printf("Родитель получил произведение чисел -- %d\n", atoi(buffer));
 
mq_close(mqr);
 
printf("Родительский процесс завершил работу!\n");
 
}
 
mq_close(mq);
 
return 0;
 
}
Миниатюры
Вывод полного произведения  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2021, 18:03
Ответы с готовыми решениями:

Вывод после полного ввода
Доброе утро, уважаемые программисты, столкнулся с такой проблемой, что при данном вводе: входные данные 4 word localization ...

Qt creator вывод полного лога сборки
Привет. Подскажите начинающему как можно вывести полный лог сборки в qt creator?

Вывод изображения без задания полного адреса setStyleSheet()
Здравствуйте, такая проблема: при указании полного адреса в setStyleSheet() картинка выводится, а когда хочу урезать адрес, то изображение...

1
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
25.12.2021, 16:39
Лучший ответ Сообщение было отмечено Drunken_soul1 как решение

Решение

Цитата Сообщение от Drunken_soul1 Посмотреть сообщение
mq_send(mqr, my_itoa(multiple, buffer), size, 0);
Потомок отправляет сообщение размером size == sizeof(int) == 4 (в твоём случае)

Соответственно, родитель получает сообщение того же размера (4 байта). 10 -- это максимальный размер буфера для mq_receive().

Цитата Сообщение от Drunken_soul1 Посмотреть сообщение
mq_receive(mqr, buffer, 10, NULL);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2021, 16:39
Помогаю со студенческими работами здесь

SWF вывод полного изображения
Перейду сразу к делу. Есть флеш swf файл, туда входит главная страница сайт, с него надо вывести полную качественую картинку....

Вывод полного содержания статьи
Прошу помощи, т.к. не нашел решения сам и на форуме. Пытаюсь сделать вывод полного содержания статьи на отдельной странице, выводит сразу...

Вывод определённых значений из таблицы, затем вывод их произведения на файл
Здравствуйте, как считать с файла только цифры(буквы не трогать), найти их произведение, затем вывести его в файл(output)? В интернете не...

Соединение таблиц и вывод полного списка
таблица1(ДХ, руководитель, ИНН, га... и.т.д.) - список клиентов таблица2(ДХ, дата, кг, сорт... и.т.д.) - приход посевныз семян ...

Вывод на экран полного названия языка
Помогите пожалуйста,не могу сдать зачет!Задание: Пусть в скрипте переменная $lang может принимать значения «ru», «en», «fr» или «de»....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru