有的时候需要传递大量的数据,如果将数据通过dbus传递,会消耗大量的带宽。可以通过传递一个文件描述符替代传递数据:
以下的service通过文件描述符接收数据:
//fd_service.cpp
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <sdbusplus/bus.hpp>
#include <iostream>
#include <string>
#include <unistd.h>
using namespace std;
void transferFd(string str, sdbusplus::message::unix_fd fdGet)
{
cout<<"recv str:"<<str<<endl;
cout<<"recv fdGet:"<<fdGet.fd<<endl;
char buf[100] = {0};
read(fdGet.fd, buf, sizeof(buf) - 1);
cout<<"read data:"<<buf<<endl;
sleep(10);
}
int main()
{
boost::asio::io_context io;
auto conn = std::make_shared<sdbusplus::asio::connection>(io);
conn->request_name("org.example.TestService");
auto server = sdbusplus::asio::object_server(conn);
share