#ifndef IPC_MSG_H #define IPC_MSG_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define UNIX_DOMAIN "/tmp/UNIX.domain" #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) #define MAX_LEN 4096 #define HELLO_MSG "hello_basic" #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER) #define container_of(ptr, type, member) ({\ const typeof(((type *)0)->member) * __mptr = (ptr);\ (type *)((char *)__mptr - offsetof(type, member)); } typedef struct memfd_data { pid_t pid; int memfd; void * data; int len; } memfd_data_st; struct user_data { int fd; unsigned int n_size; char line[MAX_LEN]; }; #define READ_THREAD_NUM 2 #define WRITE_THREAD_NUM 2 int proc_memfd(struct user_data* rdata); int basic_create_ipc_server(char * unix_domain_path); int send_fd_sendmsg(int fd, memfd_data_st** ppmemfd_data); /** * @brief 发送目标文件描述符 * @param fd 传递信息的 UNIX 域 文件描述符 * @param fd_to_send 待发送的文件描述符 */ int send_fd_args_sendmsg(int fd, int fd_to_send, pid_t pid, void **ppdata, int len); /** * @brief 接受文件描述符 * @param fd 传递信息的 UNIX 域 文件描述符 */ int recv_fd_recvmsg(int fd, memfd_data_st** ppmemfd_data); #ifdef __cplusplus } #endif #endif