1. 关键词 C++ 系统调用 操作系统平台类型 跨平台
2. sysutil.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #pragma once #include <cstdint> #include <string> namespace cutl{ enum class os_platform { os_windows, os_macos, os_linux, os_unix, os_unknown, }; os_platform platform_type () ; std::string platform_name (os_platform type) ; }
3. sysutil.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include <map> #include <iostream> #include <strutil.h> #include <cstdlib> #include "sysutil.h" #include "inner/logger.h" #include "inner/system_util.h" #include "inner/filesystem.h" namespace cutl{ os_platform platform_type () {#if defined(_WIN32) || defined(__WIN32__) return os_platform::os_windows; #elif defined(__APPLE__) || defined(__MACH__) return os_platform::os_macos; #elif defined(__linux__) return os_platform::os_linux; #elif defined(__unix__) return os_platform::os_unix; #else return os_platform::os_unknown; #endif } std::string platform_name (os_platform type) { static std::map<os_platform, std::string> platform_map = { {os_platform::os_windows, "Windows" }, {os_platform::os_macos, "macOS" }, {os_platform::os_linux, "Linux" }, {os_platform::os_unix, "Unix" }, {os_platform::os_unknown, "Unknown" }, }; auto iter = platform_map.find (type); if (iter != platform_map.end ()) { return iter->second; } return "unknown" ; } }
4. 测试代码 1 2 3 4 5 6 7 8 9 10 #include "common.hpp" #include "sysutil.h" void TestPlatformName () { PrintSubTitle ("TestPlatformName" ); auto type = cutl::platform_type (); std::cout << "OS platform: " << cutl::platform_name (type) << std::endl; }
5. 运行结果 1 2 ------------------------------------------TestPlatformName------------------------------------------ OS platform: macOS
6. 源码地址 更多详细代码,请查看本人写的C++ 通用工具库: common_util , 本项目已开源,代码简洁,且有详细的文档和Demo。