启动《Minecraft》 · 系统调用库
程序不是孤岛。它需要与操作系统交互——读写文件、创建进程、网络通信、获取系统信息。C++ 标准库提供了一部分系统功能,但很多时候我们需要直接使用操作系统的 API。
让我们来看看如何用 C++ 与操作系统打交道——甚至,启动《Minecraft》。
C++17 文件系统库
在 C++17 之前,文件系统操作需要依赖平台特定的 API。现在我们有了标准的 <filesystem> 库:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
// 当前路径
std::cout << "Current path: " << fs::current_path() << std::endl;
// 遍历目录
for (const auto& entry : fs::directory_iterator("."))
{
std::cout << entry.path() << std::endl;
}
// 递归遍历
for (const auto& entry : fs::recursive_directory_iterator("."))
{
if (entry.is_regular_file())
{
std::cout << entry.path() << " - "
<< entry.file_size() << " bytes" << std::endl;
}
}
return 0;
}文件操作
进程管理
C++ 标准库没有进程管理功能,需要使用平台 API。
Windows 进程
Linux/macOS 进程
管道通信
与子进程进行通信:
动态库加载
运行时加载共享库/DLL:
环境变量
系统信息
网络编程基础
完整示例:启动 Minecraft
把前面的知识综合起来:
总结
功能
标准库
平台 API
文件系统
<filesystem> (C++17)
Win32/POSIX
进程管理
无
CreateProcess/fork
动态库
无
LoadLibrary/dlopen
网络
无
WinSock/BSD Socket
环境变量
getenv
_putenv/setenv
系统信息
thread::hardware_concurrency
平台 API
C++ 给了我们接触系统底层的能力。善用这种能力,你可以写出真正强大的应用程序——哪怕只是为了启动《Minecraft》!
Last updated