在 Linux shell 中,我可以通过
soc_id
获取我们的 xxd /proc/device-tree/soc_id
。
在Python中,我可以通过
pathlib.Path('/proc/device-tree/soc_id').read_bytes()
得到它
但是在C++中,正如我目前在C++17中搜索/研究的那样,我无法找到一种方法来一行读取它。
这只是运行时文件系统中的一小段 4 字节数据,将在许多 C++ 应用程序中使用。所以,我不想让用户变得太复杂。一行代码是最好的解决方案。
那么,是否有可能像Python中的path.read_bytes()一样在一行代码中获取C++中的字节? 如果 C++17 中没有,那么 C++23/26 又如何?
谢谢!
没有标准库函数可以满足您的需要,但编写这样的函数很容易。
您可以通过多种方式实现,下面演示之一,并让您的所有用户应用程序使用该功能:
#include <vector>
#include <string>
#include <fstream>
std::vector<char> file_get_bytes(std::string const& filename) {
std::ifstream infile(filename, std::ios_base::binary);
if (!infile.is_open()) {
return {};
}
std::vector<char> bytes{ std::istreambuf_iterator<char>{infile},
std::istreambuf_iterator<char>{} };
return bytes;
}
使用示例:
int main() {
auto bytes = file_get_bytes("/proc/device-tree/soc_id");
}