Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

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
{
/**
* @brief Operating system platform type.
*
*/
enum class os_platform
{
/** Windows */
os_windows,
/** macOS */
os_macos,
/** Linux */
os_linux,
/** Unix */
os_unix,
/** Unknown */
os_unknown,
};

/**
* @brief Get the platform type for the current operating system.
*
* @return platform The operating system platform type.
*/
os_platform platform_type();

/**
* @brief Get the platform name for the current operating system.
*
* @param type the operating system platform type.
*
* @return std::string the platform name.
*/
std::string platform_name(os_platform type);
} // namespace cutl

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__)
// #ifdef _WIN64
// std::cout << "64-bit Windows" << std::endl;
// #else
// std::cout << "32-bit Windows" << std::endl;
// #endif
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";
}
} // namespace cutl

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。

推荐阅读
C++文件路径处理3 - 判断指定目录的文件类型(文件夹|普通文件|软连接) C++文件路径处理3 - 判断指定目录的文件类型(文件夹|普通文件|软连接) C++系统相关操作5 - 获取C++标准的版本 C++系统相关操作5 - 获取C++标准的版本 C++系统相关操作4 - 获取CPU(指令集)架构类型 C++系统相关操作4 - 获取CPU(指令集)架构类型

评论