实现与Linux进程的双向通信的可靠方法是什么?
我看到popen似乎不同时支持“r”和“w”访问......或者至少是隐含的内容:
The type argument is a pointer to a null-terminated string which must be either 'r' for reading or 'w' for writing.
(我现在很想念Erlang)
答案 0 :(得分:8)
Unix domain sockets是你的朋友。
Unix域套接字或IPC套接字 (进程间通信套接字) 是一个数据通信端点 类似于Internet套接字,但是 不使用网络协议 通讯。它用于POSIX 进程间操作系统 通信。
您为通信渠道保留了一个名称,例如/myapp/ipc
,然后这两个进程都使用UNIX套接字打开该地址:
struct sockaddr_un local;
int len;
s = socket(AF_UNIX, SOCK_STREAM, 0);
local.sun_family = AF_UNIX;
strcpy(local.sun_path, "/myapp/ipc");
len = strlen(local.sun_path) + sizeof(local.sun_family);
bind(s, (struct sockaddr *)&local, len);
现在您可以使用listen
或connect
或套接字系列中的任何其他内容。这是一些工作,但是在Linux上实现IPC的最佳方式。
由于Erlang只是一种很好的语言,用于指定通过命名管道(进程)进行通信的小型服务器(进程),因此该模型应该让您感到舒服。
答案 1 :(得分:2)
良好的旧TCP / IP连接对我来说一直都很好。