dt工具实现

本文详细介绍了如何使用UNIX域套接字(AF_UNIX)在Linux系统中实现本地进程间的通信。通过创建、设置参数、绑定、监听、连接和数据交互等步骤,阐述了服务端和客户端的实现过程。示例代码包括service.c和client.c,演示了如何通过socket文件进行通信。同时,讨论了两种命名方式:普通命名和抽象命名空间,并涉及到数据交互时的read和write系统调用。
摘要由CSDN通过智能技术生成

实例:

service.c

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h> 
#include <string>
#include <iostream>

int num_reverse(int num)
{
​    int S=0,sum=0;

​    while(num)
​    {
​      S=num%10;
​      sum=10*sum+S;
​      num = num / 10;
​    }

​    return sum;
}

static std::string getProcessName(void)
{
​    char name[256];

​    int rval = readlink("/proc/self/exe", name, sizeof(name)-1);
​    if (rval < 0)
​         return std::string();
​    name[rval] = '\0';

​    return std::string(strrchr(name, '/') + 1);
}

int main()
{
​    int num;
​    char socketPath[256];

​    sprintf(socketPath, "/tmp/socket.dbg.%s", getProcessName().c_str());
​    printf("socketPath:%s\n", socketPath);

  /* 断开之前的socket文件 */
  unlink(socketPath);

  /* 创建一个socket */
  int server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

  struct sockaddr_un server_addr;
  server_addr.sun_family = AF_UNIX;
  strcpy(server_addr.sun_path, socketPath);

  /* 与本地文件进行绑定 */
  bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

  /* 监听 */
​    int ret = listen(server_sockfd, 10);
  if(ret < 0);
  {
​      perror("Listen failed");
  }

  int client_sockfd;
  struct 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值