Вы просто не можете. Стандарт C ++ 17 не знает ни о каком виде межпроцессного взаимодействия и не знает много о процессах (за исключением std::system
, поведение которого на самом деле не указано). Некоторые операционные системы не имеют никаких процессов, а некоторые из них не имеют файлов, а некоторые из них не имеют каналов.
Узнайте больше об операционных системах. Я настоятельно рекомендую Операционные системы: три штуки (которые доступны бесплатно).
Конечно, вы можете читать и записывать файл, но синхронизация между этими двумя процессами все же должна произойти (возможно, запускает один за другим, в некоторой специфической операционной системе, так что запуск A затем B, и как именно это происходит, зависит от ОС)
Прочитайте этот стандарт C ++ 17 (например, черновик здесь ) для проверки.
Некоторые реализации C ++ 17 могут даже не иметь никакого понятия о процессе. Вы могли бы иметь полностью совместимый C ++ 17 на некоторых встроенных системах без какой-либо операционной системы, связанной с процессами.
Я рекомендую быть прагматичным и использовать некоторые фреймворки, такие как Boost , Qt , ZeroMQ или POCO (или старые сокеты Беркли ), которые имеют дело с процессами и средствами межпроцессного взаимодействия ; вы, вероятно, найдете платформу, поддерживающую несколько операционных систем, которые вас действительно волнуют (AFAIK, все Boost, POCO, Qt знают о Linux, Windows, MacOSX и предлагают общий API, абстрагирующий их; но вы можете найти некоторую академическую операционную систему, которая несовместимо с ними; на практике любой платформы, ориентированной как на Windows, так и на POSIX, должно быть достаточно).
С некоторым любопытством вы можете найти ОС с хорошей реализацией C ++ 17, которая имеет очень странный API (посмотрите в GNU Hurd для примера).
Если ваше средство IPC основано на байтовых потоках, посмотрите текстовые протоколы (возможно, JSONRPC , SOAP, HTTP, ...). Их легче кодировать, и большинство из них поставляется с некоторой C ++-совместимой библиотекой ...
А благодаря нескольким месяцам работы и большому количеству ноу-хау вы можете даже портировать недавний GCC или Clang на большинство других операционных систем: они стараются разумно абстрагировать требования к ОС.
Помните, вы можете найти операционные системы, которые даже не имеют файловой системы : посмотрите на CapROS или Contiki для недавнего примера, а также посмотрите внутри tunes.org , где были заархивированы интересные дискуссии, связанные с вашей темой, в прошлом веке. Но с некоторой болью (я думаю, что это несколько месяцев работы для эксперта GCC или Clang), вы сможете портировать недавний GCC или Clang , чтобы настроить его на получение кросс-компилятор C ++ 17, предназначенный для них.
IMHO, стандартная библиотека C ++, которая позволяет «открывать» только один «файл» (предположительно с именем THEFILE
), соответствует букве стандарта C ++ 17. AFAIK, у вас нет гарантии , что std::ifstream
или std::ofstream
успешно работает.
Кстати, современные процессоры являются практически многоядерными, поэтому имеет смысл попытаться запустить A и B параллельно и выполнить некоторый IPC (специфичным для ОС способом, возможно, абстрагированным какой-то платформой или библиотекой).