こんにちは、誰か助けてください
XとYの2つのプロセスがあります。XとYの両方に次の情報があります
typedef enum {
HEALTHY=1,
FAULTY=2,
CHANGE=3,
ERROR=4
} MsgTypeT;
typedef struct {
char role[16];
char state[16];
char info[256];
} InfoT;
typedef struct {
MsgTypeT type;
int size;
InfoT *data;
} MsgT;
ここでの条件は、プロセス Y が情報を送信した場合、プロセス X がそれを読み取るということです。したがって、x と y の間で fifo を使用しました。Y には fifo に書き込む関数書き込みバッファがあり、コードは次のとおりです。
int write_buffer(HA_DEVMON_MsgT const* send)
{
char* dest = buffer;
memcpy( dest, &send->type, sizeof( MsgTypeT ));
dest += sizeof(MsgTypeT);
memcpy( dest, &send->size, sizeof( int ));
dest += sizeof(int);
memcpy( dest, send->data, sizeof( InfoT ));
dest += sizeof(InfoT);
int byteCount = write( this->fifo_fd, buffer, dest - buffer );
if ( byteCount != dest - buffer ) {
cout<<"Error in writing ";
}
return byteCount == dest - buffer ? 0 : -1;
}
nbytes を出力しようとしたときにも cout ステートメントが正常に動作しているため、完全に書き込んでいると思います。512bytes が書き込まれました
Xが読み取ろうとすると、ロールと状態にnull値が与えられ、サイズも6441568になります。MsgTypeTに正しい他の値を与えるだけです:(コードは次のとおりです---私は何か間違ったことをしていますそれを修正してください
int readMsg(MsgT *msg)
{
int rCode=0, nbytes=0;
char buffer[512]={0};
nbytes = read(this->get_handle(), buffer, sizeof(buffer));
if (nbytes < 0) {
cout<<"error in read";
rCode=-1;
}
if (rCode == 0) {
char *p_src = (char *)buffer;
mempcpy(&msg->type, p_src, sizeof(MsgTypeT));
p_src+=sizeof(MsgTypeT);
mempcpy(&msg->size, p_src, sizeof(int));
p_src+=sizeof(int);
msg->data = new InfoT(); //allocating memory (needed or not???)
mempcpy(msg->data, p_src, sizeof(InfoT));
p_src+=sizeof(InfoT);
}
return rCode;
}