0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
1

Разделение вычисления между несколькими приложениями

17.03.2015, 20:24. Показов 1679. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализовать решение задания, разделив вычисления между несколькими приложениями. Для обмена информацией между приложениями использовать именованные каналы.

Само задание:
Поменять местами соответственные элементы в массивах А и В, если хотя бы один элемент является простым числом. Входные данные первого приложения: массив чисел А фиксированной размерности. Входные данные второго приложения: массив чисел B, той же размерности, что и массив А.
Файл 1:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
 
using namespace std;
 
int main ()
{
char s[6];
int fd;
fd = open ("1", O_WRONLY);
int mas1[3] = {11,12,13};
write(fd,&mas1,3);
close(fd);
return 0;
}
Файл 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
 
using namespace std;
 
int main ()
{
char s[6];
int fd;
fd = open ("2", O_WRONLY);
int mas1[3] = {21,22,23};
write(fd,&mas1,3);
close(fd);
return 0;
Файл 3:
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
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
 
using namespace std;
 
int main ()
{
int mas1[3], mas2[3];
int fd[2];
int fd1, fd2;
mkfifo("1", S_IFIFO|0666);
fd1=open("1,O_RDONLY);
mkfifo("2", S_IFIFO|0666);
fd2=open("1,O_RDONLY);
read(fd1,&mas1,3);
read(fd2,&mas2,3);
if (mas1[3] != mas2[3])
{
int t = mas1[3];
mas1[3] = mas2[3];
mas2[3] = t;
}
}
Ничего не работает. Прошу помощи
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2015, 20:24
Ответы с готовыми решениями:

Создать постоянно действующие каналы между несколькими одновременно работающими приложениями
Подключение установленной программы на компьютере к visual basic . Можно ли это сделать и как ?

Обмен данных между DOS-приложениями и Windows-приложениями
Как настроить установки Windows 98, чтобы нажатием клавиши PrtSc рисунок, созданный Borland...

Использование текстурных юнитов несколькими приложениями
Здравствуйте! Вопрос нубский, но не смог найти ответ... Как я понял, текстурные слоты это блоки...

Для Работы с несколькими приложениями, графикими редакторами
Компьютер нужен ,как было отмечено в заголовке, для работы с несколькими приложениями одновременно,...

23
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
17.03.2015, 22:30 2
Лучший ответ Сообщение было отмечено VitekSR как решение

Решение

File 1:
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
#include <iostream>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
 
int main()
{
    umask(0);
    mkfifo("./req", S_IRUSR | S_IWUSR | S_IWGRP);
    mkfifo("./resp", S_IRUSR | S_IWUSR | S_IWGRP);
    int req_fd = open("./req", O_WRONLY);
    int resp_fd = open("./resp", O_RDONLY);
    int a[3] = {7,8,9};
    int stored_value;
    for(short i = 0;i<3;++i)
    {
        stored_value = a[i];
        read(resp_fd, &a[i], sizeof(int));
        write(req_fd, &stored_value, sizeof(int));
    }
    unlink("./req");
    unlink("./resp");
    std::cout<<"Server:\n";
    for(short i = 0;i<3;++i)
        std::cout<<a[i]<<" ";
    close(req_fd);
    close(resp_fd);
}
File 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
 
int main()
{
    int resp_fd = open("./req", O_RDONLY);
    int req_fd = open("./resp", O_WRONLY);
    int a[3] = {0,1,2};
    for(short i = 0;i<3;++i)
    {
        write(req_fd, &a[i], sizeof(int));
        read(resp_fd, &a[i], sizeof(int));
    }
    std::cout<<"Client:\n";
    for(short i = 0;i<3;++i)
        std::cout<<a[i]<<" ";
    close(req_fd);
    close(resp_fd);
}
1
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
18.03.2015, 09:06  [ТС] 3
Velesthau, а с 3им файлом, с самой сортировкой что делать? У меня "третий файл" не правильный же
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
18.03.2015, 09:46 4
В задании про сортировку ничего нет. Я просто написал вариант, как можно обменять данные в массивах разных процессов через FIFO. Напиши яснее, что не получается.
1
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
19.03.2015, 20:41  [ТС] 5
Цитата Сообщение от Velesthau Посмотреть сообщение
В задании про сортировку ничего нет.
Не сортировку, а замену местами элементов в массивах А и В, если хотя бы один элемент является простым числом
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
20.03.2015, 10:06 6
Цитата Сообщение от VitekSR Посмотреть сообщение
Не сортировку, а замену местами элементов в массивах А и В
В чем тогда вопрос? Как поменять элементы - код я написал. Тебе осталось найти простое число и просто его выполнить, если оно есть.
1
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
21.03.2015, 21:57  [ТС] 7
Velesthau, возник вопрос. После того как откомпилировал файл, запускаю его ./lab32, далее у меня ничего не выводится. Что делать с этим?
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.03.2015, 12:30 8
Цитата Сообщение от VitekSR Посмотреть сообщение
После того как откомпилировал файл, запускаю его ./lab32, далее у меня ничего не выводится. Что делать с этим?
Какой файл? Там две программы. Одна ждет данных от другой и передает ей свои.
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
23.03.2015, 15:19  [ТС] 9
Цитата Сообщение от Velesthau Посмотреть сообщение
Какой файл? Там две программы. Одна ждет данных от другой и передает ей свои.
Смотри, 2 файла - т.е 2 программы. Каждую программу я откомпилировал, запускаю, далее ничего не происходит. Никакой передачи данных от одной к другой.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.03.2015, 15:34 10
Подозреваю, что ты хреново прочитал код, и запускаешь их не в одной директории. Либо поменяй путь к fifo явно.
Цитата Сообщение от VitekSR Посмотреть сообщение
Никакой передачи данных от одной к другой.
Даже если все отбросить, отладку пробовал когда-нибудь?
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
23.03.2015, 20:57  [ТС] 11
Цитата Сообщение от Velesthau Посмотреть сообщение
Даже если все отбросить, отладку пробовал когда-нибудь?
В линуксе я работаю только первую неделю, отладку не знаю как сделать пока что. До этого работал в visual studio, там умею все

Цитата Сообщение от Velesthau Посмотреть сообщение
Подозреваю, что ты хреново прочитал код, и запускаешь их не в одной директории.
Для наглядности прикрепил скриншот, файл lab32 и файл lab33 находятся в одной директории (так же я запускаю файл ./lab33, ничего не происходит, разумеется все компилировал)
Миниатюры
Разделение вычисления между несколькими приложениями  
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.03.2015, 21:23 12
Цитата Сообщение от VitekSR Посмотреть сообщение
В линуксе я работаю только первую неделю, отладку не знаю как сделать пока что.
Делай тогда отладку принтами. У меня массивы обмениваются через fifo нормально.
Цитата Сообщение от VitekSR Посмотреть сообщение
в visual studio, там умею все
Студии отупляют.

Добавлено через 45 секунд
Цитата Сообщение от VitekSR Посмотреть сообщение
так же я запускаю файл ./lab33
Запускаешь-то одновременно? )

Добавлено через 4 минуты
Ты код скопировал, как есть? Или по-своему поменял?
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
23.03.2015, 21:42  [ТС] 13
Цитата Сообщение от Velesthau Посмотреть сообщение
Запускаешь-то одновременно? )
Я сначала ввожу ./lab32, потом жду чего то, ибо не знаю как одновременно запускаются

Добавлено через 11 секунд
Цитата Сообщение от Velesthau Посмотреть сообщение
Ты код скопировал, как есть?
как есть
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.03.2015, 23:37 14
Цитата Сообщение от VitekSR Посмотреть сообщение
потом жду чего то
ну вот и приложение тоже ждет, когда другое ему в fifo отправит элемент своего массива.
Цитата Сообщение от VitekSR Посмотреть сообщение
ибо не знаю как одновременно запускаются
Ты больше одного терминала когда-нибудь пробовал открывать?
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
24.03.2015, 12:27  [ТС] 15
Цитата Сообщение от Velesthau Посмотреть сообщение
Ты больше одного терминала когда-нибудь пробовал открывать?
В таком случае вот что получается
Миниатюры
Разделение вычисления между несколькими приложениями  
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
24.03.2015, 12:31  [ТС] 16
Изменил запуск, получилось вот такое
Миниатюры
Разделение вычисления между несколькими приложениями  
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
24.03.2015, 12:41 17
Если что, в терминале можно вкладки открывать, а не отдельные окна...
Вопрос в чем? Добавь принты и посмотри, что из fifo читается в одном приложении, в другом, и т. д. А ты скриншотами кидаешься. Учись действовать самостоятельно.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
24.03.2015, 12:48 18
Хотя я тоже могу скриншотами кидаться
Разделение вычисления между несколькими приложениями

И удали fifo созданные, если ты грохнул сервер и он их не удалил.
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
26.03.2015, 23:22  [ТС] 19
Решил еще раз САМ написать код

Файл 1:
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
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
 
using namespace std;
 
int main ()
{
unlink("mypipe");
int a[3];
int fd;
 
if (mkfifo ("mypipe", S_IFIFO|0777) < 0)
{
cout << "";
return 0;
}
cout << "Введите три символа: " << endl;
cin >> a[0] >> a[1] >> a[2];
fd = open ("mypipe", O_WRONLY);
write (fd, &*a, sizeof(int));
 
 
close(fd);
 
return 0;
}
Файл 2:
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
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
 
using namespace std;
 
int main ()
{
char b[3];
int fd;
 
cout << "Введите три символа: " << endl;
cin >> b[0] >> b[1] >> b[2];
 
 
 
fd = open ("mypipe", O_WRONLY);
write (fd, &*b, sizeof(int));
 
 
close (fd);
unlink("mypipe");
 return 0;
}
Файл 3:
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
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
 
using namespace std;
 
bool prostoe_chislo(int fd)
{
int v[2];
read(fd, &v, sizeof(v));
for (int x = 0; x < 2; x++)
{
if ((v[x] == 0 || v[x] == 1))
return false;
for (int i = v[x]-1; i > 1; i--)
if ((v[x] % i) == 0)
return false;
}
return true;
}
 
int main ()
{
int a[3];
int b[3];
int fd;
for (int i = 0; i < 3; i++)
{
fd = open ("mypipe", O_RDONLY);
read (fd, &a[i], sizeof(int));
read (fd, &b[i], sizeof(int));
}
 
 
cout << "Исходный массив a: " << a << endl;
cout << "Исходный массив b: " << b << endl;
 
close(fd);
unlink("mypipe");
 return 0;
}
На ф-цию проверки на простое число можно пока не смотреть, она пока нигде не используется. А не получается у меня вывести массив a и массив b, ибо выводится какая то фигня.
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
28.03.2015, 15:42  [ТС] 20
UP!
Velesthau, надеюсь ты поможешь
0
28.03.2015, 15:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2015, 15:42
Помогаю со студенческими работами здесь

Управление несколькими различными приложениями MS Office из одного макроса
Всем доброго времени суток! Заранее извиняюсь за нубский вопрос. В VB/VBS/VBA новичок. Подскажите,...

Сигналы между приложениями
Собственно. Есть служба и оболочка(программа) к ней... как отправить &quot;сигнал&quot; из программы к службе...

Обмен между приложениями
Есть два приложения в ОС Windows , одно консольное которое ждет ввода трех чисел std::cin , второе...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru