From ca312c023b11d7885227addc7564494998d8898c Mon Sep 17 00:00:00 2001 From: cheliequan <liequanche@126.com> Date: 星期三, 28 十二月 2022 13:31:58 +0800 Subject: [PATCH] 更新ipc client库和使用示例 --- src/ipc_client.c | 109 +++++++----------------------------------------------- 1 files changed, 14 insertions(+), 95 deletions(-) diff --git a/src/ipc_client.c b/src/ipc_client.c index aeb2490..e9809c3 100644 --- a/src/ipc_client.c +++ b/src/ipc_client.c @@ -1,56 +1,17 @@ #include <stdio.h> -#include <stdlib.h> -#include <sys/socket.h> -#include <sys/un.h> -#include <unistd.h> -#include <sys/syscall.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <string.h> -#include <stdio.h> -#include <sys/inotify.h> -#include <sys/time.h> -#include <errno.h> +#include "memfd.h" #include "ipc_msg.h" - -#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ -} while (0) - - -int memfd_open(char* fd_path) -{ - ssize_t len; - int fd; - struct stat st; - fd = open(fd_path, O_RDWR); - if (fd == -1) - errExit("open"); - - if (fstat (fd, &st)) - errExit ("fstat"); - len = st.st_size; - - printf("length: %zu, atime: %lu.%lu\n", len, st.st_atim.tv_sec, st.st_atim.tv_nsec); - - return fd; -} int memfd_read(int fd) { unsigned char* addr; - struct stat st; - ssize_t i, len; - if (fstat (fd, &st)) - errExit ("fstat"); - len = st.st_size; - - addr = (unsigned char*) mmap (NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr == MAP_FAILED) - errExit("mmap"); - + len = basic_shm_mmap(fd, &addr); + if(len < 0) + { + return -1; + } printf ("start: "); for (i = 0; i < 32; ++i) printf ("%i ", addr[i]); @@ -61,75 +22,33 @@ return len; } + int main(int argc, char **argv) { - int fd; - int connect_fd; - struct sockaddr_un srv_addr; - char snd_buf[MAX_LEN] = {0}; - char rcv_buf[MAX_LEN] = {0}; + int fd = 0; int ret; int i; char *fd_path; memfd_data_st memfd_data = {0}; int rcv_num = 0; - connect_fd = socket(AF_UNIX, SOCK_STREAM, 0); - - if(connect_fd < 0) + ret = basic_create_ipc_client(UNIX_DOMAIN, &memfd_data); + if(ret < 0) { - perror("client create socket failed"); - return 1; + return ret; } - srv_addr.sun_family = AF_UNIX; - strcpy(srv_addr.sun_path, UNIX_DOMAIN); - ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr)); - - if(ret == -1) - { - perror("connect to server failed!"); - close(connect_fd); - unlink(UNIX_DOMAIN); - return 1; - } - - printf("connect to server path:%s success!", srv_addr.sun_path); - - //memset(rcv_buf, 0, sizeof(rcv_buf)); - //int rcv_num = read(connect_fd, rcv_buf, sizeof(rcv_buf)); - //memcpy(&memfd_data, rcv_buf, sizeof(memfd_data_st)); - - memset(snd_buf, 0, 256); - strcpy(snd_buf, HELLO_MSG); - printf("sizeof(snd_buf): %ld\n", sizeof(snd_buf)); - - printf("send data to server... ...\n"); - // for(i = 0; i < 4; i++) - { - write(connect_fd, snd_buf, sizeof(snd_buf)); - } - printf("send end!\n"); - - - memset(rcv_buf, 0, sizeof(rcv_buf)); - rcv_num = read(connect_fd, rcv_buf, sizeof(rcv_buf)); - if(rcv_num == 0) - { - close(connect_fd); - return 0; - } - memcpy(&memfd_data, rcv_buf, rcv_num); printf("receive message from server,pid:%d, memfd:%d\n", memfd_data.pid, memfd_data.memfd); if ((memfd_data.pid != 0) && (memfd_data.memfd != 0)) { char fd_path[256] = {0}; snprintf(fd_path, sizeof(fd_path), "/proc/%d/fd/%d", memfd_data.pid, memfd_data.memfd); - fd = memfd_open(fd_path); + fprintf(stderr,"fd_path:%s\n", fd_path); + fd = basic_shm_open(memfd_data.memfd, memfd_data.pid , 1); ret = memfd_read(fd); } - close(connect_fd); + basic_shm_close(fd); return 0; } -- Gitblit v1.8.0