首页 > 编程语言 >C++系统相关操作3 - 获取操作系统的平台类型

C++系统相关操作3 - 获取操作系统的平台类型

时间:2024-06-23 22:58:27浏览次数:25  
标签:sysutil 操作系统 platform type system C++ 获取 include os

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。

标签:sysutil,操作系统,platform,type,system,C++,获取,include,os
From: https://www.cnblogs.com/luoweifu/p/18264074

相关文章

  • LeetCode 70. 爬楼梯 使用c++解答
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1.1阶+1阶......
  • 如何使用ig507金融数据库的股票接口,股票API来获取MACD指标
    一、MACD指标简介MACD(MovingAverageConvergenceDivergence,移动平均收敛/发散)是一种趋势跟踪动量指标,用于分析股票或其他金融产品的价格趋势。MACD由两部分组成:差离值(DIF)和信号线(DEA)。DIF是短期(通常12天)指数移动平均线(EMA)与长期(通常26天)EMA的差值,再通过一个平滑期(通常9天)的EMA......
  • 如何使用ig507金融数据库的股票接口,股票API来获取MACD指标
    一、MACD指标简介MACD(MovingAverageConvergenceDivergence,移动平均收敛/发散)是一种趋势跟踪动量指标,用于分析股票或其他金融产品的价格趋势。MACD由两部分组成:差离值(DIF)和信号线(DEA)。DIF是短期(通常12天)指数移动平均线(EMA)与长期(通常26天)EMA的差值,再通过一个平滑期(通常9天)的E......
  • C++ 关联容器使用 map, unordered_map, set, unordered_set, multiset, unordered_mul
    关联容器是否有序是否关联值是否可重复访问时间set是否否对数map是是否对数multiset是否是对数multimap是是是对数unordered_map否是否常数unordered_set否否否常数unordered_multiset否否是常数unordered_multimap否是是常数#include<map>#include<set>#includ......
  • MyBatis 源码分析--获取SqlSession
    前言:前文我们从源码层面梳理了SqlSessionFactory的创建过程,本篇我们继续分析一下SqlSession的获取过程。初识MyBatis【MyBatis核心概念】MyBatis源码分析–SqlSessionFactory案例代码:publicclassMyBatisTest{@Testpublicvoidtest()throwsIOEx......
  • 【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos
    目录一.冯诺依曼体系结构(VonNeumannArchitecture)注意事项存储器的意义:缓冲数据流动示例二.操作系统(OperatingSystem)操作系统的概念操作系统的定位与目的操作系统的管理系统调用和库函数操作系统的管理:sum三.系统调用实现示例:Pintos项目Step1:进入ex......
  • 【C++高阶】高效搜索的秘密:深入解析搜索二叉树
    ......
  • 【操作系统】信号Signal超详解|捕捉函数
    ......
  • C++11 标准库头文件模拟实现
    系列文章目录文章目录系列文章目录前言●智能指针模板●Vector1.简单版本2.X总结前言暂不考虑支持多线程常用STL的简单实现,主要内容百行左右完成,意在理解STL的原理●智能指针模板SharedPtr#include<assert.h>#include<atomic>template<classT......
  • 一个使用Python和假设的天气API来获取和展示天气数据的简单脚本示例
    要使用Python编写一个天气预测的脚本,我们通常需要依赖于现有的天气API来获取实时或历史天气数据,并且结合机器学习或统计模型来进行预测。然而,由于天气预测是一个复杂的任务,通常需要大量的计算资源和专业的气象知识,这里我们将简化这个过程,只展示如何使用Python和一个假设的天......