C++系統相關操作4 - 獲取CPU(指令集)架構型別

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

1. 關鍵詞

關鍵詞:

C++ 系統呼叫 CPU架構 指令集 跨平臺

實現原理:

  • Unix-like 系統: 可以透過 uname -m 命令獲取 CPU 架構型別。
  • Windows 系統: 可以透過環境變數 PROCESSOR_ARCHITECTURE 獲取 CPU 架構型別。

2. sysutil.h

#pragma once

#include <cstdint>
#include <string>

namespace cutl
{
    /**
     * @brief Get the architecture of the cpu processor(or operating system).
     *
     * @return std::string the architecture.
     */
    std::string architecture();
} // 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
{
    std::string architecture()
    {
#if defined(_WIN32) || defined(__WIN32__)
        return cutl::getenv("PROCESSOR_ARCHITECTURE", "");
#else
        static std::string arch;
        if (arch.empty())
        {
            std::string cmd = "uname -m";
            callcmd(cmd, arch);
            CUTL_DEBUG("cmd: " + cmd + ", result: " + arch);
        }
        return arch;
#endif
    }
} // namespace cutl

4. 測試程式碼

#include "common.hpp"
#include "sysutil.h"

void TestArchitecture()
{
    PrintSubTitle("TestArchitecture");

    std::cout << "OS architecture: " << cutl::architecture() << std::endl;
}

5. 執行結果

------------------------------------------TestArchitecture------------------------------------------
OS architecture: x86_64

6. 原始碼地址

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

相關文章