|
|
|
@ -8,13 +8,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
// IPC‑канал поверх именованных pipe.
|
|
|
|
// IPC‑канал поверх именованных pipe.
|
|
|
|
// Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage.
|
|
|
|
// Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage.
|
|
|
|
|
|
|
|
// readPipe — тот FIFO, который этот endpoint читает; writePipe — тот, в который пишет.
|
|
|
|
|
|
|
|
|
|
|
|
class IpcPipeChannel : public RpcChannel {
|
|
|
|
class IpcPipeChannel : public RpcChannel {
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
IpcPipeChannel(const char* writePipe, const char* readPipe) {
|
|
|
|
IpcPipeChannel(const char* readPipe, const char* writePipe) {
|
|
|
|
// Канал не создаёт FIFO, только открывает.
|
|
|
|
// Канал не создаёт FIFO, только открывает.
|
|
|
|
fdOut_ = ::open(writePipe, O_WRONLY);
|
|
|
|
// Открываем оба конца как O_RDWR, чтобы избежать блокировок на open(O_RDONLY/O_WRONLY).
|
|
|
|
fdIn_ = ::open(readPipe, O_RDONLY);
|
|
|
|
// При этом логически читаем только из readPipe, а пишем только в writePipe.
|
|
|
|
|
|
|
|
fdIn_ = ::open(readPipe, O_RDWR);
|
|
|
|
|
|
|
|
fdOut_ = ::open(writePipe, O_RDWR);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
~IpcPipeChannel() override {
|
|
|
|
~IpcPipeChannel() override {
|
|
|
|
|