首页 > 编程语言 >C++系统相关操作2 - 获取系统环境变量

C++系统相关操作2 - 获取系统环境变量

时间:2024-06-21 21:53:31浏览次数:14  
标签:std bin string sysutil 系统 C++ usr include 环境变量

1. 关键词

C++ 系统调用 环境变量 getenv 跨平台

2. sysutil.h

#pragma once

#include <cstdint>
#include <string>

namespace cutl
{
    /**
     * @brief Get an environment variable.
     *
     * @param name the name of the environment variable.
     * @param default_value the default value if the variable is not found.
     * @return std::string the value of the environment variable.
     */
    std::string getenv(const std::string &name, const std::string &default_value);
} // 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 getenv(const std::string &name, const std::string &default_value)
    {
        const char *text = std::getenv(name.c_str());
        if (text == nullptr)
        {
            CUTL_ERROR("variable [" + name + "] not set, fallback to " + default_value);
            return default_value;
        }

        return std::string(text);
    }
} // namespace cutl

4. 测试代码

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

void TestGetEnv()
{
    PrintSubTitle("TestGetEnv");

    auto result = cutl::getenv("PATH", "not found");
    std::cout << "getenv for PATH, result:" << std::endl
              << result << std::endl;

    // for Windows testing
    std::cout << "USERPROFILE: " << cutl::getenv("USERPROFILE", "not found") << std::endl;
    std::cout << "PROCESSOR_ARCHITECTURE: " << cutl::getenv("PROCESSOR_ARCHITECTURE", "not found") << std::endl;
    // FOR UNIX/LINUX/MAC testing
    std::cout << "HOME: " << cutl::getenv("HOME", "not found") << std::endl;
}

5. 运行结果

---------------------------------------------TestGetEnv---------------------------------------------
getenv for PATH, result:
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/go/bin
USERPROFILE: [2024-06-21 21:32:28.863][E]]0x7ff85b8d5fc0](cutl) [sysutil.cpp:208:getenv] variable [USERPROFILE] not set, fallback to not found
not found
PROCESSOR_ARCHITECTURE: [2024-06-21 21:32:28.863][E]]0x7ff85b8d5fc0](cutl) [sysutil.cpp:208:getenv] variable [PROCESSOR_ARCHITECTURE] not set, fallback to not found
not found
HOME: /Users/spencer

6. 源码地址

更多详细代码,请查看本人写的C++ 通用工具库: common_util, 本项目已开源,代码简洁,且有详细的文档和Demo。

标签:std,bin,string,sysutil,系统,C++,usr,include,环境变量
From: https://www.cnblogs.com/luoweifu/p/18261580

相关文章

  • (26-5-03)基于OpenAI和LangChain的上市公司估值系统:定量分析(Quantitative Analysis)(3)计
    10.5.4 计算估值(1)在本项目中,分别使用了基于股息和自由现金流的方法计算股票的估值。针对不同情景(正常和经济衰退),分别进行了计算。通过这些计算,可以帮助投资者评估股票的合理价格,并制定相应的投资策略。dict_values_for_bi={}stock_value_div_ttm_fixed=divi......
  • C++核心编程运算符的重载
    C++核心编程运算符的重载文章目录C++核心编程运算符的重载1.“+”运算符的重载1.1作为成员函数重载1.2作为全局函数重载2."<<"运算符重载2.1为什么需要重载左移运算符2.2如何重载左移运算符2.3注意事项3."++"运算符重载3.1前置递增运算符重载3.2后置递增运算符重载......
  • 2022年大作业参考报告-使用C++语言开发小学生成绩管理系统、中学生成绩管理系统、大学
    背景:目录第一章需求分析   21.1   问题描述   26.1   功能需求   26.2   开发环境   26.3   开发过程   2第二章概要设计   32.1   总体设计   32.2   类的定义   32.3   接口设计   52.4  ......
  • opencv入门-小白的学习笔记c++(1)
    注:以下是根据链接https://blog.csdn.net/Cream_Cicilian/article/details/105427752的小白学习过程。1加载、修改、保存图像1.1加载图像1.1.1加载图像cv::imread用于从文件中读取图像数据并将其存储到一个cv::Mat对象中,其中第一个参数表示图像文件名称第二个参数,表......
  • Linux系统编程基本程序框架
    -----仅作为学习笔记1、什么是Linux系统编程?Linux系统编程也叫Linux下的高级编程,是介于应用层和驱动层之间的。2、Linux系统编程的基本程序框架#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){//argc:表示的是命令行中参数的个数//......
  • 阿基米德签证小程序(APP)管理系统源码安装步骤说明
      阿基米德所有系统支持Lunix/windows服务器环境,需要PHP7.1~8.3版本支持(推荐使用8.3),可运行于包括Apache和nginx在内的多种WEB服务器和模式(推荐使用nginx),支持Mysql5.0~8.0数据库(4G以上内存推荐使用8.0,不然就5.7),引擎用InnoDB。框架本身没有什么特别模块要求,具体的应用系统......
  • Linux系统之配置Nginx反向代理
    Linux系统之配置Nginx反向代理一、Nginx介绍1.1Nginx简介1.2Nginx反向代理二、本次实践介绍2.1本次实践简介2.2本次实践环境规划三、基于端口配置反向代理3.1安装nginx软件3.2备份配置文件3.3编辑nginx配置文件3.4启动Nginx服务3.5检查Ng......
  • 基于Java+SSM的吃了吗美食店铺推荐订餐系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了吃了吗管理系统的开发全过程。通过分析吃了吗管理系统管理的不足,创建了一个计算机管理吃了吗管理系统的方案。文章介绍了吃了吗管理系统的系统分析部分,包括可行性分析等,......
  • 基于Java+SSM的和谐小区物业管理系统
    传统办法管理双星小区物业信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装双星小区物业管理系统软件来发挥其高效地信息处理的作用,可以规范双星小区物业信息管理流程,让管理工作可以......
  • 汽车功能安全(ISO 26262)系列_ 系统阶段开发 - 技术安全需求(TSR)及安全机制
    汽车功能安全(ISO 26262)系列: 系统阶段开发 - 技术安全需求(TSR)及安全机制01. 什么是TSR附赠自动驾驶最全的学习资料和量产经验:链接总体而言,技术安全需求(TSR: Technical Safety Requirement)是为满足安全目标SG或功能安全需求(FSR),由功能安全需求(FSR)在技......