fup fifos
This commit is contained in:
+3
-1
@@ -11,7 +11,9 @@ int main() {
|
|||||||
mkfifo("/tmp/rpc_out", 0666);
|
mkfifo("/tmp/rpc_out", 0666);
|
||||||
|
|
||||||
// IPC‑уровень: канал поверх pipe.
|
// IPC‑уровень: канал поверх pipe.
|
||||||
IpcPipeChannel ch("/tmp/rpc_in", "/tmp/rpc_out");
|
// Клиент пишет в fifo, который читает сервер (rpc_in),
|
||||||
|
// и читает из fifo, в который пишет сервер (rpc_out).
|
||||||
|
IpcPipeChannel ch("/tmp/rpc_out", "/tmp/rpc_in");
|
||||||
|
|
||||||
// RPC‑уровень: прокси поверх канала.
|
// RPC‑уровень: прокси поверх канала.
|
||||||
MyServiceProxy proxy(ch);
|
MyServiceProxy proxy(ch);
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ int main() {
|
|||||||
mkfifo("/tmp/rpc_out", 0666);
|
mkfifo("/tmp/rpc_out", 0666);
|
||||||
|
|
||||||
// IPC‑уровень: канал поверх pipe.
|
// IPC‑уровень: канал поверх pipe.
|
||||||
|
// Сервер читает из rpc_in и пишет в rpc_out.
|
||||||
IpcPipeChannel ch("/tmp/rpc_in", "/tmp/rpc_out");
|
IpcPipeChannel ch("/tmp/rpc_in", "/tmp/rpc_out");
|
||||||
|
|
||||||
// RPC‑уровень: скелет поверх того же канала.
|
// RPC‑уровень: скелет поверх того же канала.
|
||||||
|
|||||||
Reference in New Issue
Block a user