【问题标题】:Simplistic way to send data to another process (win)?将数据发送到另一个进程(win)的简单方法?
【发布时间】:2019-05-02 12:37:09
【问题描述】:

假设您正在为 windows 平台(A 和 B)开发两个应用程序。

平台/系统是 Windows(如果重要的话,Windows 10)

如果您只允许在 c++ 语言级别(即:包括标准库和 STL)工作,您如何从 A 向 B 发送一些信息?这排除了任何第三方库。

我试图避免使用系统 API,因为它通常涉及大量类似 c 的编程(因此不适合我的目的)。

在这种特殊情况下,两个进程都在连续运行,并且由于某些外部事件(如果重要)而发生发送 - 所以可能需要某种同步。

正在考虑的可能解决方案:

  1. 通过std::ofstreamstd::ifstream 使用文件可能是一种可能的解决方案(尽管是粗略的解决方案)? - 但是如何实现同步呢?

  2. 1234563 p>

【问题讨论】:

  • 上次提到,c++标准库没有任何关于IPC的概念。你的问题又太笼统了。
  • 如果你想避免Windows API,那么文件确实是唯一的方法,然后没有任何同步。否则,命名管道可能是最简单的。
  • 除非你使用第三方库(为什么不呢?)如果你想做任何不属于标准 C++ 的事情,你永远不会放弃做“类 C 编程”。除非这是为了学习练习,否则我真的建议您使用库。无需重新发明轮子(而且可能很糟糕)。
  • @πάνταῥεῖ 当您回答“不”时,那为什么它太宽泛了?我不要求可能的解决方案 - 我只要求一种可行的解决方案
  • @Someprogrammerdude 这确实是一种学习练习——这就是我试图尽可能多地刮掉的原因。

标签: powershell c++ windows powershell ipc c++17


【解决方案1】:

涉及通过数据文件传输的解决方案(这使用std::filesystem::rename 作为同步方式,或者您可以说避免它):

a.exe(作家)

#include <filesystem>

auto tmpfile = std::filesystem::temp_directory_path() / "some_uuid.txt";
auto datafile = std::filesystem::temp_directory_path() / "data.txt";
std::ofstream(tmpfile) << "hello" << std::endl;

std::filesystem::rename(tmpfile, datafile);

b.exe(阅读器)

auto datafile = std::filesystem::temp_directory_path() / "data.txt";
while (!std::filesystem::exists(datafile)) {
  ;//we have nothing else to do ?
}
std::ifstream input(data);
//read input etc.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多