我有一些進程通過管道連接,所以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_以及來自相應庫的支持。 –