进程间传递数据的方式有很多种,Linux还提供一种特殊的Socket用于在多进程间传递数据,就是Unix Domain Socket(UDS)。
虽然通过普通的Socket也能做到在多进程间传递数据,不过这样需要通过协议栈层的打包与拆包,未免有些浪费效率,通过UDS,数据仅仅通过一个特殊的sock文件就可以进行传递。同时由于这种数据传递是通过内核完成的,所以不会存在UDP通信时的丢包现象。
以下对UDS的使用进行封装:
#pragma once
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <string>
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
class UDSData{
public:
UDSData()
{
//创建基于数据包的通信,类似UDP
m_sockFd = socket(AF_UNIX, SOCK_DGRAM, 0);
if(m_sockFd == -1)
{
cout << "create socket failed" <<endl;
}
}
int bindFile(const string& sockFilePath)
{
if(m_sockFd == -1)
{
cout << "invalid socket" <<end
标签:UDS,Domain,Socket,通过,进程,传递数据,include
From: https://blog.csdn.net/jiemashizhen/article/details/140229019