这是关于通过stdin / stdout进行进程间通信的问题。
问题是我有一个COM库,我无法使用任何Java-COM桥(一个特定的功能总是导致核心转储)。但我能够从C ++程序中使用它。
所以我决定用C ++创建一个包装器服务器程序来为我做这些调用,并通过stdin / stdout从Java进行通信,但我在这里面临一个问题。 我决定使用protobufs来传递消息,主要问题是在C ++端读取输入。 我需要一个方法,它会阻塞,直到将一定数量的字节写入stdin才能读取。
我的想法是使用谷歌的protobufs,并建立这样的沟通:
由于我缺乏C ++和Windows编程知识(我使用MSVS2013社区编译它,并且有很多特定的窗口),设置这种双向通信比我想象的要困难得多来自所有这些COM代码的marcos / typedef。)
是否有一些第三方库,可以创建这么简单的服务器,实际上,简单?
PS:可以是C,可以是C ++,我只需要它在Windows上运行。
答案 0 :(得分:1)
一个相对简单的消息处理循环可能如下所示。 但是,您应该检查两个读取的返回值并在那里处理错误。
void read_and_process_message(void) {
while(true) {
long nMessageBytes;
read(stdin, &nMessageBytes, sizeof(long));
//Convert from network byte-order to local byte order
nMessageBytes = ntohl(nMessageBytes);
char * buffer = malloc(nMessageBytes);
read(stdin, buffer, nMessageBytes);
// Do something with your buffer and write to stdout.
}
}