我有一些进程通过管道连接,所以stdout从一个是另一个stdin,反之亦然。我需要通过这个struct Message
通过标准输入和标准输出,但我无法设法做到这一点。C++ - 进程之间发送消息
的结构:
strcut Task{
bool some;
char text[MAX_TEXT_AREA];
}
struct Stat{
char text[MAX_TEXT_AREA];
unsigned short id;
}
struct Message{
int nTasks;
int nStats;
Task tasks[];
Stat stats[];
}
这就是我为了把Message
到stdout已经试过:
Message* m; //suppose it's initialized
write(STDOUT_FILENO, m, sizeof(Message));
for(int i=0; i<m->nTasks; ++i) write(STDOUT_FILENO, m->tasks[i], sizeof(Task));
for(int i=0; i<m->nStats; ++i) write(STDOUT_FILENO, m->stats[i], sizeof(Stat));
我得到一些编译错误,但我不知道如何解决此问题。有没有办法在不修改任何struct
的情况下打印信息?
对于阅读这是我有:
Message* m;
while(read(STDIN_FILENO, m, sizeof(Message))){
m->tasks = new Tarea[m->nTasks];
m->stats = new Stat[m->nStats];
for(int i=0; i<m->nTasks; ++i){
m->tasks[i] = new Task;
read(0, m->tasks[i], sizeof(Task));
}for(int i=0; i<m->nStats; ++i){
m->stats[i] = new Stat;
read(0, m->stats[i], sizeof(Stat));
}
}
一个进程创建的消息并打印出来,那么其他进程读取它,修改它,再打印到第一个过程(如一个戒指)等等。
同样,我需要这个到write/read
而不修改任何struct
。谢谢。
一个管道传送一个字节流。因此,首先指定将在进程之间交换的字节格式。除非您在这方面有丰富的经验和专业知识,否则在您指定之前不能编码。实施前应记录协议。 –
我刚刚定义了两个管道,使用了'dup2',因此stdin和stdout被重定向,就是这样。该协议应该如何定义?这就是我要问的原因,因为我没有这方面的经验。 – sant016
@ sant016查找关于_data de-/serialization_以及来自相应库的支持。 –