c/c++ linux 进程间通信系列2,使用UNIX_SOCKET
程序员文章站
2022-06-22 11:59:20
linux 进程间通信系列2,使用UNIX_SOCKET 1,使用stream,实现进程间通信 2,使用DGRAM,实现进程间通信 关键点:使用一个临时的文件,进行信息的互传。 使用stream,server端: c++ include include include include include ......
linux 进程间通信系列2,使用unix_socket
1,使用stream,实现进程间通信
2,使用dgram,实现进程间通信
关键点:使用一个临时的文件,进行信息的互传。
s_un.sun_family = af_unix; strcpy(s_un.sun_path, "/tmp/afunix_text");
使用stream,server端:
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/un.h> #define filepath "/tmp/afunix_text" int main(){ int s0, sock; sockaddr_un s_un; sockaddr_un s_un_accept; socklen_t addrlen; s0 = socket(af_unix, sock_stream, 0); if(s0 < 0){ perror("socket"); return 1; } s_un.sun_family = af_unix; strcpy(s_un.sun_path, filepath); if(bind(s0, (sockaddr*)&s_un, sizeof(s_un)) != 0){ perror("bind"); return 1; } if(listen(s0, 5) != 0){ perror("listen"); return 1; } addrlen = sizeof(s_un_accept); sock = accept(s0, (sockaddr*)&s_un_accept, &addrlen); if(sock < 0){ perror("accept"); return 1; } printf("after accept\n"); write(sock, "the msg is send from server", 27); close(sock); close(s0); unlink(filepath); return 0; }
使用stream,client端:
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/un.h> int main(){ int sock; sockaddr_un s_un; int n; char buf[128]; sock = socket(af_unix, sock_stream, 0); if(sock < 0){ perror("socket"); return 1; } s_un.sun_family = af_unix; strcpy(s_un.sun_path, "/tmp/afunix_text"); if(connect(sock, (sockaddr*)&s_un, sizeof(s_un)) != 0){ perror("connect"); return 1; } printf("after connect\n"); memset(buf, 0, sizeof(buf)); n = read(sock, buf, sizeof(buf)); if(n < 0){ perror("read"); return 1; } printf("%s\n", buf); close(sock); return 0; }
使用dgram,发送端:
#include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> int main(){ int sock; sockaddr_un addr; socklen_t addrlen; sock = socket(af_unix, sock_dgram, 0); addr.sun_family = af_unix; strcpy(addr.sun_path, "/tmp/afu_dgram"); int n = sendto(sock, "hello\n", 6, 0, (sockaddr*)&addr, sizeof(addr)); printf("send data\n"); close(sock); return 0; }
使用dgram,接收端:
#include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> int main(){ int sock; sockaddr_un addr; socklen_t addrlen; char buf[1024]; int n; sock = socket(af_unix, sock_dgram, 0); addr.sun_family = af_unix; strcpy(addr.sun_path, "/tmp/afu_dgram"); bind(sock, (sockaddr*)&addr, sizeof(addr)); while(1){ memset(buf, 0, sizeof(buf)); n = recv(sock, buf, sizeof(buf) - 1, 0); printf("recv:%s\n", buf); } close(sock); return 0; }
c/c++ 学习互助qq群:877684253
本人微信:xiaoshitou5854
推荐阅读
-
c/c++ linux 进程间通信系列3,使用socketpair,pipe
-
c/c++ linux 进程间通信系列4,使用共享内存
-
c/c++ linux 进程间通信系列6,使用消息队列(message queue)
-
c/c++ linux 进程间通信系列5,使用信号量
-
c/c++ linux 进程间通信系列7,使用pthread mutex
-
c/c++ linux 进程间通信系列2,使用UNIX_SOCKET
-
c/c++ linux 进程间通信系列1,使用signal,kill
-
c/c++ linux 进程间通信系列7,使用pthread mutex
-
c/c++ linux 进程间通信系列3,使用socketpair,pipe
-
c/c++ linux 进程间通信系列4,使用共享内存