У меня есть клиент, который отправляет сообщения, сериализованные protobuf, на сервер через linux fifo. Я использую ifstream и ofstream в своем коде для операций ввода-вывода.
Если я напишу так:
//client
Client::request() {
std::ofstream pipeOut;
pipeOut.open(outputPipeName);
msg.SerializeToOstream(&pipeOut);
pipeOut.close();
...
}
//server
Server::process_requests() {
std::ifstream pipeIn;
while(isRunning) {
pipeIn.open(inputPipeName);
msg.ParseFromIstream(&pipeIn);
pipeIn.close();
...
}
}
все работает отлично. Но я не хочу постоянно открывать и закрывать потоки. Вместо этого я хочу написать что-то вроде этого:
//client
class Client {
std::ofstream pipeOut;
};
Client::Client() {
pipeOut.open(outputPipeName);
}
Client::~Client() {
pipeOut.close();
}
Client::request() {
msg.SerializeToOstream(&pipeOut);
...
}
//server
Server::process_requests() {
std::ifstream pipeIn;
pipeIn.open(inputPipeName);
while(isRunning) {
msg.ParseFromIstream(&pipeIn);
...
}
pipeIn.close();
}
но с этим кодом сервер блокируется внутри функции ParseFromIstream, и выполнение программы не идет дальше. Кто-нибудь может подсказать, пожалуйста, как правильно написать это?