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

Обмен данными между процессами в Windows

26.01.2021, 05:06. Показов 3260. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обмен данными между процессами в Windows с помощью отображения файлов в память. Как делается?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2021, 05:06
Ответы с готовыми решениями:

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

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

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

4
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,123
26.01.2021, 08:34
Creating Named Shared Memory
Как я понимаю, с помощью отображения файлов делается только общая память. Этого не достаточно для полноценного взаимодействия двух процессов. Процессы должны сигналить друг другу о том, что новые данные готовы, прочитаны и типа того. Для полноценного взаимодействия через общую память в дополнение используются различные именованные примитивы синхронизации: ивенты, семафоры, мьютексы и тому подобное.
0
0 / 0 / 0
Регистрация: 13.01.2020
Сообщений: 4
26.01.2021, 10:39
NikolaevIvan, посмотрите рабочий пример здесь: http://purebasic.mybb.ru/viewt... =787#p8087 (7 пост).
Там код хоть и в синтаксисе PureBasic, но основан на WinAPI, так, что разобраться можно.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,824
26.01.2021, 11:32
https://docs.microsoft.com/en-... /ipc/pipes
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,467
27.01.2021, 12:57
NikolaevIvan,

передача данных через отображаемый в память файл:

Кликните здесь для просмотра всего текста

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
#include <windows.h>
#include <fstream>
 
int main()
{
  char    MappingName[] = "MappingName";
  HANDLE  hMapping;      // дескриптор объекта, отображающего файл
  int    *ptr;           // для указателя на массив
  const int    n = 10;   // размерность массива
 
  cout << "This is a parent process." << endl;
  // открываем объект отображения файла в память
  hMapping = CreateFileMapping(
        INVALID_HANDLE_VALUE,  // файл подкачки страниц
        NULL,            // атрибуты защиты по умолчанию
        PAGE_READWRITE,  // режим доступа: чтение и запись
        0,               // старшее слово = 0
        n * sizeof(int), // младшее слово = длине массива
        MappingName);    // имя объекта отображения
  if (!hMapping)
  {
    cerr << "Create file mapping failed." << endl;
    return GetLastError();
  }
  // создаем вид файла
  ptr = (int*)MapViewOfFile(
      hMapping,        // дескриптор объекта отображения
      FILE_MAP_WRITE,  // режим доступа к виду
      0,0,             // отображаем файл с начала
      0);              // отображаем весь файл
  // инициализируем массив и выводим его на консоль
  cout  << "Array: ";
  for (int i = 0; i < n; ++i)
  {
    ptr[i] = i;
    cout << ptr[i] << ' ';
  }
  cout << endl;
//----------------------------------------------------------------------
// создаем процесс, который будет читать данные из отображаемого 
// в память файла
  char lpszAppName[] = "C:\\ConsoleProcess.exe";
 
  STARTUPINFO si;
  PROCESS_INFORMATION piApp;
 
  ZeroMemory(&si, sizeof(STARTUPINFO));
  si.cb = sizeof(STARTUPINFO);
 
  // создаем новый консольный процесс
  if (!CreateProcess(lpszAppName, NULL, NULL, NULL, FALSE,
      CREATE_NEW_CONSOLE, NULL, NULL, &si, &piApp))
  {
    cerr << "Create process failed." << endl;
    return GetLastError();
  }
  // ждем завершения созданного прцесса
  WaitForSingleObject(piApp.hProcess, INFINITE);
  // закрываем дескрипторы этого процесса в текущем процессе
  CloseHandle(piApp.hThread);
  CloseHandle(piApp.hProcess);
//----------------------------------------------------------------------
  // отменяем отображение файла в память
  if (!UnmapViewOfFile(ptr))
  {
    cerr << "Unmap view of file failed." << endl;
    return GetLastError();
  }
  // закрываем объект отображения файла в память
  if (!CloseHandle(hMapping))
  {
    cerr << "Close file failed." << endl;
    return GetLastError();
  }
  // ждем команду на завершение процесса
  char  c;
  cout << "Input any char to exit: ";
  cin >> c;
 
  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
#include <windows.h>
#include <fstream>
 
int main()
{
  char  MappingName[] = "MappingName";
  HANDLE  hMapping;      // дескриптор объекта, отображающего файл
  int    *ptr;           // для указателя на массив
  const int    n = 10;   // размерность массива
 
  cout << "This is a child process." << endl;
  // открываем объект отображения файла в память
  hMapping = CreateFileMapping(
        INVALID_HANDLE_VALUE,  // файл подкачки страниц
        NULL,            // атрибуты защиты по умолчанию
        PAGE_READWRITE,  // режим доступа: чтение и запись
        0,               // старшее слово = 0
        n * sizeof(int), // младшее слово = длине массива
        MappingName);    // имя объекта отображения
  if (!hMapping)
  {
    cerr << "Create file mapping failed." << endl;
    return GetLastError();
  }
  // создаем вид файла
  ptr = (int*)MapViewOfFile(
      hMapping,        // дескриптор объекта отображения
      FILE_MAP_WRITE,  // режим доступа к виду
      0,0,             // отображаем файл с начала
      0);              // отображаем весь файл
  // выводим массив из вида на консоль
  cout  << "Array: ";
  for (int i = 0; i < n; ++i)
    cout << ptr[i] << ' ';
  cout << endl;
  // отменяем отображение файла в память
  if (!UnmapViewOfFile(ptr))
  {
    cerr << "Unmap view of file failed." << endl;
    return GetLastError();
  }
  // закрываем объект отображения файла в память
  if (!CloseHandle(hMapping))
  {
    cerr << "Close file failed." << endl;
    return GetLastError();
  }
  // ждем команду на завершение процесса
  char  c;
  cout << "Input any char to exit: ";
  cin >> c;
 
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2021, 12:57
Помогаю со студенческими работами здесь

Обмен сообщениями между процессами (не потоками одного процесса!!!)
В общем есть несколько процессов (отдельных экзешников). Им необходимо вместе работать. Причем у меня есть свой класс семафора и...

Обмен данными между двумя приложениями
есть 2 приложения. Приложение 1 - Создает Приложение 2 с помощью CreateProcess(); следовательно знает его ThreadId и ProcessId и...

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

Обмен данными между процессами
Добрый день Имеется следующая идея архитектуры приложения: основной процесс паралельно рисует графику в окнах и управляет некоторыми...

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


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru