Я хочу создать приложение на c ++ для Ubuntu 16.04, которое получает данные из папки / sys / class / net / eth0 / statistics /. В частности, мне нужно получить rx_bytes и rx_packets. Команда, которую я успешно попробовал в терминале, следующая:
sed -n -e 3p -e 13p /sys/class/net/enp0s3/statistics/*
Я попытался дать ту же команду, используя метод Poco ProcessHandle, используя следующий код:
#include <iostream>
#include <vector>
#include "Poco/Exception.h"
#include "Poco/Process.h"
#include "Poco/Pipe.h"
#include "Poco/PipeStream.h"
using namespace std;
using Poco::Process;
using Poco::ProcessHandle;
using Poco::Pipe;
using Poco::PipeInputStream;
using Poco::PipeOutputStream;
using Poco::Exception;
int main(int argc, char** argv)
{
try {
std::vector<std::string> args;
std::string cmd = "sed";
args.push_back("-n");
args.push_back("-e");
args.push_back("3p");
args.push_back("-e");
args.push_back("15p");
args.push_back("/sys/class/net/enp0s3/statistics/*");
Pipe outPipe;
ProcessHandle ph = Process::launch(cmd, args, 0, &outPipe, 0);
PipeInputStream istr(outPipe);
std::string s;
int c = istr.get();
while (c != -1) {
s += (char)c;
c = istr.get();
}
std::cout << "string is " << s << std::endl;
return 0;
}
catch (Poco::Exception& exc)
{
std::cerr << exc.displayText() << exc.code() << string(exc.name()) << std::endl;
return 1;
}
Однако я получаю сообщение об ошибке:
sed: can't read /sys/class/net/enp0s3/statistics/*: No such file or directory
Когда я пробую код с определенным файлом, я получаю правильные строки.
Я знаю, что есть альтернатива command cat, но есть ли способ, чтобы приведенный выше код работал успешно.