我正在使用RHEL 8和systemd版本是239-74我想在c++上使用dbus获取数据当只使用一个容器时这不是问题(但这种情况下退出容器时也会发生相同的错误)但是当我应该使用一个以上的容器时我得到“设备或资源忙碌”
#include <iostream>
#include <unistd.h>
#include <systemd/sd-bus.h>
int main() {
sd_bus_error error = SD_BUS_ERROR_NULL;
sd_bus *bus = nullptr;
int ret = sd_bus_open_system(&bus);
const char *service_name = "org.freedesktop.systemd1";
const char *object_path = "/org/freedesktop/systemd1";
const char *interface = "org.freedesktop.systemd1.Manager";
const char *method = "ListUnits";
sd_bus_message *reply = nullptr;
ret = sd_bus_call_method(bus,
service_name,
object_path,
interface,
method,
&error,
&reply,
"");
if (ret < 0) {
return 1;
}
const char *unit_name;
const char *unit_description;
const char *unit_load_state;
const char *unit_active_state;
const char *sub_state,*followed_state,*object1_path,*queued_job,*job_type,*job_object_path;
unsigned int uint;
ret = sd_bus_message_enter_container(reply, 'a', "(ssssssouso)");
if(ret<0){
std::cerr <<strerror(-ret);
}
ret = sd_bus_message_exit_container(reply);
if(ret<0){
std::cerr <<strerror(-ret);
}
sd_bus_message_unref(reply);
sd_bus_unref(bus);
return 0;
}
字符串
我认为是环境问题,但在Ubuntu上,发生了同样的错误。我想读取dict的数组,但我无法退出容器,所以我无法获取其他数据
1条答案
按热度按时间yvfmudvl1#
从文档中:
请注意,sd_bus_message_exit_container()只能在遍历容器的所有成员后调用,即阅读或跳过它们。
在退出容器之前,您需要消耗数组的内容:
字符串