可靠的双向通信到Linux进程?

时间:2009-11-05 19:18:00

标签: linux process communication

实现与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)

2 个答案:

答案 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);

现在您可以使用listenconnect或套接字系列中的任何其他内容。这是一些工作,但是在Linux上实现IPC的最佳方式。

由于Erlang只是一种很好的语言,用于指定通过命名管道(进程)进行通信的小型服务器(进程),因此该模型应该让您感到舒服。

答案 1 :(得分:2)

良好的旧TCP / IP连接对我来说一直都很好。