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

Обмен данными между процессами через именованные каналы

12.04.2020, 12:42. Показов 1045. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. У меня есть код, который создает 3 процесса-потомка, я пронумеровала каждый из них, чтобы в if указать, какой из них процесс что именно должен делать. У меня 1 процесс - родительский, 2, 3, 4 - потомки. Задача в том, чтобы из 1, 2 и 3 процесса информацию передать в 4-й через именованные каналы. У меня и код есть отдельно, где 1 передает информацию 2-му, но у меня не выходит соединить эти 2 кода:


Создает 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
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h> 
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <iostream>
using namespace std;
int main() 
{
    pid_t pids[3];
    int c=1;
    memset(pids, 0, sizeof(pid_t) * 3);
    for (int i = 0; i < 3; ++i)
    {
        pids[i]=c++;
        switch(pids[i] = fork())
        {
            case -1:
            {
                perror("[Error] fork\n");
                exit(-1);
            }
            case 0:
            {
                fprintf(stdout, "[CHILD %d] My pid = %d, my number = %d\n", i + 1, getpid(), c);
                fprintf(stdout, "[CHILD %d] My ppid = %d\n", i + 1, getppid());
                exit(0);
            }
        }
    }
    for (int i = 0; i < 3; waitpid(pids[i++], 0, 0));
    fprintf(stdout, "\n[PARENT] My pid = %d\n", getpid());
    return 0; 
}



Передает информацию с 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
30
31
32
#include <iostream>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
 
using namespace std;
 
int main(int argc, const char * argv[])
{
  char name[]= "/tmp/fifo1";
  if (mknod(name, S_IFIFO | 0660, 0) != 0) return -1;
  cout << name << " created\n";
  int pd= fork();
  if (pd < 0) return -1;
  if (pd) {
    sleep (1);
    int fd = open (name, O_WRONLY | O_NDELAY);
    if (fd < 0) return -1;
    write(fd, "Message for FIFO!!!\n", 100);
    close(fd);
    unlink(name);
  }
  else {
    int fd = open (name ,O_RDONLY);
    if (fd < 0) return -1;
    char msg[100] = {0};
    read (fd, msg, 100);
    cout << msg;
  }
  return 0;
}
Помогите, пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2020, 12:42
Ответы с готовыми решениями:

Обмен данными между процессами, сокеты
чувствую я пока вообще не врубаюсь помогите разобраться как передать данные другому процессу через сокеты #include &lt;stdio.h&gt; ...

Обмен данными между процессами через файлы, что отображаются в памяти
Добрый вечер. У меня есть код читателей-писателей и 2 консольных приложения, где происходит обмен данных между процессами с помощью файлов,...

Обмен данными между процессами
При создании дочернего процесса при помощи функции BOOL CreateProcess ( LPCTSTR lpApplicationName, // имя...

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

Обмен данными между процессами
Добрый день! Нужно распараллелить программу. Суть в следующем: должны быть два процесса(разные функции), идущих параллельно, и второй...

Обмен данными между процессами
Уважаемое сообщество, подскажите, пожалуйста, с решением такой проблемы: у меня два процесса c# и с++, и мне необходимо передавать массив...

Обмен данными между процессами
Добрый день. У меня есть программа отправителя и программа получателя. Я не совсем понимаю, как FindWindow() должно искать моё окно. У меня...

Обмен данными между двумя процессами
Добрый день/вечер. Усердно слушал преподавателя на паре, прошуршал много литературы дома, но так и не понял, как заюзать обмен данными...

Обмен данными между процессами в консольных приложениях
Привет. Можно ли как - то обмениваться данными между двумя запущенными консольными приложениями без WinAPI и без использования файлов...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru