Ich versuche, ein Objekt über eine Named Pipe zwischen zwei Prozessen in C++ mit ifstream und ofstream zu senden. Ich habe so viele Dinge gelesen und probiert, aber meine Forschung hat zu nichts geführt.C++: Ein Objekt über eine Named Pipe senden
Ich blockiere während der Serialisierung meines Objekts. Wenn ich versuche, an meine Named Pipe zu senden und zu senden, kann ich mein Objekt nicht in seinem normalen Zustand wiederherstellen.
ich versuche, etwas mit diesem Code aber das Objekt ist nach seinem Durchgang in dem Named Pipes nicht voll:
#include <string.h>
#include <iostream>
#include <unistd.h>
#include <fstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
class Obj {
public:
std::string text1;
std::string text2;
};
int main() {
mkfifo("fifo", 0666);
if (fork() == 0) //Receiving Side
{
std::ifstream fifo("fifo", std::ofstream::binary);
//Re-make the object
Obj *tmp = new Obj();
char *b = new char[sizeof(*tmp)];
//Receive from named pipe
fifo >> b;
//Recover the object
memcpy(&*tmp, b, sizeof(*tmp));
//Display object content
std::cout << tmp->text1 << std::endl << tmp->text2 << std::endl;
//!\ Output = "Some \n" /!\\
fifo.close();
delete tmp;
delete[] b;
}
else //Sending Side
{
std::ofstream fifo("fifo", std::ofstream::binary);
//Create the object
Obj *struct_data = new Obj();
struct_data->text1 = "Some text";
struct_data->text2 = "Some text";
char *b = new char[sizeof(*struct_data)];
//Serialize the object
memcpy((void *)b, &*struct_data, sizeof(*struct_data));
//Send to named pipe
fifo << b;
fifo.close();
wait(NULL);
delete[] b;
}
//delete struct_data;
return (0);
}
Was mir jemand könnte einen Tipp geben oder en Beispiel?
Danke! :)
Zeigen Sie uns die Serialisierung Code. Ist das Byte-Format dokumentiert? Wenn ja, zeigen Sie uns bitte die Dokumentation. Wenn nicht, dokumentieren Sie es. Vertrauen Sie mir, es lohnt sich, jedes Protokoll zu dokumentieren - am besten bevor Sie es kodieren. –
Wenn Sie "cast and send" sagen ... sind Sie tatsächlich Serialisierung oder versuchen Sie nur, die rohen Bytes zu senden? Und wie sieht dein Objekt aus? – Useless
Ihr Problem hat wahrscheinlich nichts mit Rohren zu tun (benannt oder nicht). Sie können versuchen, den Absender dazu zu bringen, auf stdout zu schreiben, während der Leser das Objekt von stdin empfängt und sie mit '|' verbindet. Spart viel Aufwand beim Einrichten der Rohre und was nicht. –