接收数据端recv.cpp
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct TestData_t
{
/* data */
int attr1;
char attr2[32];
} TestData_t;
class PipeRead
{
private:
/* data */
const char *m_pipe_file = "/tmp/fifo";
int m_fd;
public:
PipeRead(/* args */);
~PipeRead();
int RecvData(char *buf, int size);
};
PipeRead::PipeRead(/* args */)
{
mkfifo(m_pipe_file, S_IWUSR | S_IRUSR);
m_fd = open(m_pipe_file, O_RDONLY);
if (0 > m_fd)
{
printf("open pipe_file error \n");
}
}
PipeRead::~PipeRead()
{
close(m_fd);
}
int PipeRead::RecvData(char *buf, int size)
{
return read(m_fd, buf, size);
}
int main()
{
int ret = -1;
printf("fifo create success\n");
PipeRead recv_client;
TestData_t data;
// printf("data.attr1: %d, data.attr2: %s \n", data.attr1, data.attr2);
// send_client.SendData();
while (true)
{
/* code */
ret = recv_client.RecvData((char *)&data, sizeof(TestData_t));
printf("ret : %d\n", ret);
if (ret == 0)
{
printf("send data finish, ");
printf("write process close \n");
break;
}
if (ret < 0)
{
/* code */
printf("read error \n");
sleep(1);
continue;
}
printf(" recv data.attr1: %d, data.attr2: %s \n", data.attr1, data.attr2);
}
return 0;
}
发送数据端 send.cpp
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
typedef struct TestData_t
{
/* data */
int attr1;
char attr2[32];
} TestData_t;
class PipeWrite
{
private:
/* data */
const char *m_pipe_file = "/tmp/fifo";
int m_fd;
public:
PipeWrite(/* args */);
~PipeWrite();
int SendData(char *buf, int size);
};
PipeWrite::PipeWrite(/* args */)
{
mkfifo(m_pipe_file, S_IWUSR | S_IRUSR);
m_fd = open(m_pipe_file, O_WRONLY);
if (0 > m_fd)
{
printf("open pipe_file error \n");
}
}
PipeWrite::~PipeWrite()
{
close(m_fd);
}
int PipeWrite::SendData(char *buf, int size)
{
return write(m_fd, buf, size);
}
void signal_process(int sig)
{
printf("recv process closed\n");
exit(1);
}
int main()
{
int i = 0;
signal(SIGPIPE, signal_process);
printf("fifo create success\n");
PipeWrite send_client;
while (true)
{
/* code */
TestData_t data = {i++, "hello world"};
printf("data.attr1: %d, data.attr2: %s \n", data.attr1, data.attr2);
send_client.SendData((char *)&data, sizeof(TestData_t));
sleep(3);
}
return 0;
}