From 3ce014732763fd28a7b03d5ce99ec990f830f985 Mon Sep 17 00:00:00 2001
From: cheliequan <liequanche@126.com>
Date: 星期五, 30 十二月 2022 15:59:41 +0800
Subject: [PATCH] 1.客户端支持只获取memfd,只获取数据,同时获取memfd和数据 2.优化代码,所有日志使用mydebug

---
 sample/ipc_client.c |   83 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/sample/ipc_client.c b/sample/ipc_client.c
index e9809c3..7dde9a3 100644
--- a/sample/ipc_client.c
+++ b/sample/ipc_client.c
@@ -1,4 +1,6 @@
 #include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
 #include "memfd.h"
 #include "ipc_msg.h"
 
@@ -27,15 +29,60 @@
 {
   int fd = 0;
   int ret;
-  int i;
-  char *fd_path;
+  int recv_len = 0;
   memfd_data_st  memfd_data = {0};
-  int rcv_num = 0;
+  char snd_buf[MAX_LEN] = {0};
+  char * unix_domain_path = NULL;
 
-  ret = basic_create_ipc_client(UNIX_DOMAIN, &memfd_data);
+  char *recv_buf = (char *)malloc(MAX_LEN);
+
+  /*client get memfd from server*/
+  memset(snd_buf, 0, sizeof(snd_buf));
+  strncpy(snd_buf, GET_MEMFD_MSG, strlen(GET_MEMFD_MSG) + 1);
+  printf("snd_buf: %s\n", snd_buf);  
+  memset(recv_buf, 0, MAX_LEN);
+
+  unix_domain_path = UNIX_DOMAIN;
+  ret = basic_create_ipc_client(unix_domain_path, snd_buf, strlen(snd_buf), (void **)&recv_buf, &recv_len);
   if(ret < 0)
   {
     return ret;
+  }
+
+  memcpy(&memfd_data, recv_buf, sizeof(memfd_data));
+
+  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);
+    fprintf(stderr,"fd_path:%s\n", fd_path);
+    fd = basic_shm_open(memfd_data.memfd, memfd_data.pid, 1);
+    ret = memfd_read(fd);
+  }
+
+  basic_shm_close(fd);
+
+  /*client get memfd and custom data from server*/
+#if 1
+
+  memset(snd_buf, 0, sizeof(snd_buf));
+  strncpy(snd_buf, GET_CUSTOM_MSG, strlen(GET_CUSTOM_MSG) + 1);
+  printf("\nsnd_buf: %s\n", snd_buf);  
+  memset(recv_buf, 0, MAX_LEN);
+
+  unix_domain_path = UNIX_DOMAIN;
+  ret = basic_create_ipc_client(unix_domain_path, snd_buf, strlen(snd_buf), (void **)&recv_buf, &recv_len);
+  if(ret < 0)
+  {
+    return ret;
+  }
+
+  memcpy(&memfd_data, recv_buf, sizeof(memfd_data));
+  if(memfd_data.len > 0)
+  {
+      memfd_data.data = malloc(memfd_data.len);
+      memcpy(memfd_data.data, recv_buf+sizeof(memfd_data), memfd_data.len);
   }
 
   printf("receive message from server,pid:%d, memfd:%d\n", memfd_data.pid, memfd_data.memfd);
@@ -44,11 +91,37 @@
     char fd_path[256] = {0};
     snprintf(fd_path, sizeof(fd_path), "/proc/%d/fd/%d", memfd_data.pid, memfd_data.memfd);
     fprintf(stderr,"fd_path:%s\n", fd_path);
-    fd = basic_shm_open(memfd_data.memfd, memfd_data.pid , 1);
+    fd = basic_shm_open(memfd_data.memfd, memfd_data.pid, 1);
     ret = memfd_read(fd);
   }
 
   basic_shm_close(fd);
+  fprintf(stderr,"custom data:%s\n", (char *)memfd_data.data);
+  if(memfd_data.len > 0)
+  {
+     free(memfd_data.data);
+  }
+#endif
+
+#if 1
+  /*client get usedata from server*/
+  memset(snd_buf, 0, sizeof(snd_buf));
+  strncpy(snd_buf, GET_DATA_MSG, strlen(GET_DATA_MSG) + 1);
+  printf("\nsnd_buf: %s\n", snd_buf);  
+  memset(recv_buf, 0, MAX_LEN);  
+  recv_len = 0;
+
+  //unix_domain_path="/tmp/unix_domain_usedata";
+  ret = basic_create_ipc_client(unix_domain_path, snd_buf, strlen(snd_buf), (void **)&recv_buf, &recv_len);
+  if(ret < 0)
+  {
+    return ret;
+  }
+  printf("receive message from server msg:%s\n", recv_buf);
+  /*deal the recv_buf*/
+#endif
+
+  free(recv_buf);
   return 0;
 
 }

--
Gitblit v1.8.0