假设您正在开发两个应用程序(A和B)。
如果只允许您使用c ++语言级别(包括标准库和STL),您怎么能从A向B发送一些信息?
现在我在想std :: ofstream和std :: ifstream可能是一种可能的解决方案(尽管很粗糙)? -但是那里有什么陷阱,可以避免吗? (如何?)。
答案 0 :(得分:3)
你只是不能。标准C ++ 17不了解任何种类的进程间通信,也不了解进程(除非通过std::system
来确定其行为)。有些operating systems没有任何进程,有些没有文件,有些没有管道。
详细了解操作系统。我强烈推荐Operating Systems: Three Easy Pieces(可免费获得)。
当然,您可以读写文件,但是两个进程之间的同步仍然应该发生(也许通过运行,以某种特定于操作系统的方式一个接一个地运行,因此运行A然后是B,具体情况如何,具体取决于操作系统)
阅读该C ++ 17标准(例如here草案)以进行检查。
某些C ++ 17实现可能甚至没有任何过程概念。您可以在某些嵌入式系统上拥有完全兼容的C ++ 17,而无需任何操作系统来处理进程。
我的建议是务实,并使用Boost,Qt,ZeroMQ或POCO(或旧的Berkeley sockets)之类的框架),用于处理流程和流程间的通讯设施;您可能会找到一个支持您真正关心的几种操作系统的框架(AFAIK,所有Boost,POCO,Qt都了解Linux,Windows,MacOSX,并提供了将它们抽象的通用API;但是您可以找到一些学术操作系统,与它们不兼容;实际上,任何同时针对Windows和POSIX的框架都应该足够了。
出于好奇,您可能会发现具有良好C ++ 17实现的操作系统具有非常奇怪的API(例如查看GNU Hurd)。
如果您的IPC工具基于字节流,请查看text-based protocols(也许是JSONRPC,SOAP,HTTP等)。它们更易于编码,并且大多数都带有一些C ++兼容的库...
经过几个月的工作和大量的专业知识,您甚至可以将最新的GCC或Clang移植到大多数其他操作系统上:他们谨慎地以巧妙的方式抽象了OS上的需求。
请记住,您可能会发现甚至没有file system的OS:查看CapROS或Contiki的最新示例,并在tunes.org里面查看在过去的一个世纪中,与您的主题相关的有趣讨论已被存档。但是有些痛苦(我的猜测是,对于GCC或Clang专家来说,这是几个月的工作),您将能够移植最新的GCC或Clang来定位它以获得C ++针对他们的17个交叉编译器。
IMHO是C ++标准库,它只能“打开”一个“文件”(据说名为THEFILE
),符合C ++ 17标准的字母。 AFAIK,您没有std::ifstream
或std::ofstream
成功运行的保证。
顺便说一句,当前的处理器实际上是多核的,因此尝试并行运行A和B并执行一些IPC(以特定于操作系统的方式,可能是由某些框架或库抽象的)是很有意义的。