fup fifos

master
Сергей Маринкевич 2 months ago
parent 0712460db0
commit 66c4e5190b

@ -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уровень: скелет поверх того же канала.

Loading…
Cancel
Save