socket多用於網路通訊,但將服務位址設為本機位址之後,即可實現本機程序間socket通訊,利用socket可以在程序間方便地傳輸資料。
在linux平台上還支援af_unix通訊,而不必設定本機位址,這種socket通訊型別在windows平台上並不適用。
下面模擬三個程序間利用socket通訊,server程序負責接收客戶端程序1和2的通訊請求並且將通訊內容轉交給對端。對於server端利用兩個執行緒分別接收兩個客戶端的連線請求,並且開了兩個socket,這種方式只是簡單的模擬實現,是效率低下的一種方式。示例**如下:
服務程序server
#include #include #include #include #include #include #include #include //for memset客戶程序2 process2#include #include #include // 設定埠號
#define rpc_port_csdk 6666
#define rpc_port_ui 6665
#define buff_size 1024
#define log_file "daemon.log"
char recv_ui[buff_size];
char recv_csdk[buff_size];
// 通過可變引數寫日誌檔案
void writelog(const char* format, ...)
void recvmessage(int fd, char* buf)
ret = recv(fd, buf, buff_size, 0);
buf[ret] = '\0';
if(ret > 0) }
void sendmessage(int fd, const char* towhom)
else if(towhom == "ui")
else
}else if(towhom == "csdk")
else
}}void initdaemon(void)
// 設定服務端位址及埠
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = af_inet;
serveraddr.sin_addr.s_addr = htonl(inaddr_any); // inaddr_any--自動查詢本機位址
serveraddr.sin_port = htons(rpc_port);
ret = connect(clientfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
if( ret < 0)
char sendbuf[buff_size] = "hello, i am ui";
char recvbuf[buff_size];
memset(recvbuf, 0, buff_size);
while(1)
return 0;
}
#include #include #include #include #include #include #include #include //for memset
#include #include // 設定埠號
#define rpc_port 6666
#define buff_size 1024
int main(void)
// 設定服務端位址及埠
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = af_inet;
serveraddr.sin_addr.s_addr = htonl(inaddr_any); // inaddr_any--自動查詢本機位址
serveraddr.sin_port = htons(rpc_port);
ret = connect(clientfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
if( ret < 0)
char sendbuf[buff_size] = "hello, i am csdk";
char recvbuf[buff_size];
memset(recvbuf, 0, buff_size);
while(1)
return 0;
}
Linux程序間通訊
程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...