實現與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