实现与Linux进程的双向通信的可靠方式是什么?与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)
实现与Linux进程的双向通信的可靠方式是什么?与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)
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只是用于指定通过命名管道(进程)进行通信的小型服务器(进程)的一种很好的语言,因此该模型应该让您感觉舒适。
良好的旧TCP/IP连接对我来说一直很好。
Unix域套接字比TCP更有效。 – 2009-11-05 19:32:53
但是TCP具有允许您的系统扩展到1个以上的优点。幸运的是,将代码从unix域套接字移植到TCP是微不足道的。 – 2009-11-05 19:34:47
...所以我会产生一个进程,并传递参数打开和侦听套接字的参数? – jldupont 2009-11-05 19:21:16
或使用指定的套接字(请参阅'mkfifo')。对于双向通信,您只需要其中两个... – Wim 2009-11-05 19:25:58