C++系統相關操作3 - 獲取作業系統的平臺型別

陌尘(MoChen)發表於2024-06-23
  • 1. 關鍵詞
  • 2. sysutil.h
  • 3. sysutil.cpp
  • 4. 測試程式碼
  • 5. 執行結果
  • 6. 原始碼地址

1. 關鍵詞

C++ 系統呼叫 作業系統平臺型別 跨平臺

2. sysutil.h

#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


#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. 測試程式碼

#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. 執行結果

------------------------------------------TestPlatformName------------------------------------------
OS platform: macOS

6. 原始碼地址

更多詳細程式碼,請檢視本人寫的C++ 通用工具庫: common_util, 本專案已開源,程式碼簡潔,且有詳細的文件和Demo。

相關文章