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