ubuntu下 C/C++程序读取设置环境变量

设置环境变量很简单比如:

export QMCY_LOCAL_PORT=8888

追加的话

export QMCY_LOCAL_PORT=$QMCY_LOCAL_PORT:8000

可以通过echo回显

读取的话 main函数多加一个env参数 一个字符串数组 然后遍历这个数组 即可

使用的时候 如下:

bool QMCY_APP::Init(std::string &config_file, char *env[])
{char *file_content = nullptr;int size = 0;unsigned seed = time(0);srand(seed);if(config_file.empty()){std::cout<<"config file is null"<<std::endl;return false;}FILE * fp = fopen(config_file.c_str(),"r");if(fp == NULL){return false;}fseek(fp, 0, SEEK_END);size = ftell(fp);file_content = (char *)malloc(size+1);if(file_content){fseek(fp, 0, SEEK_SET);fread(file_content,size,1,fp);ReadConfig(file_content);free(file_content);}fclose(fp);	int i = 0;char key[20] ={0},value[30]={0};for(; env[i]; i++){std::string temp = env[i];std::size_t found = temp.find(m_basic_info.server_ip_name);if(found!= std::string::npos){int converted = sscanf(temp.c_str(),"%[^=]=%s",key,value);if(converted == 2){m_basic_info.server_ip = value;				}}found = temp.find(m_basic_info.server_port_name);if(found!= std::string::npos){int converted = sscanf(temp.c_str(),"%[^=]=%s",key,value);if(converted == 2){m_basic_info.server_port = atoi(value);}}found = temp.find(m_basic_info.local_port_name);if(found!= std::string::npos){int converted = sscanf(temp.c_str(),"%[^=]=%s",key,value);if(converted == 2){//std::cout<<"local port :"<<key<<" :"<<value<<std::endl;m_basic_info.local_port = atoi(value);				}}}if(m_basic_info.local_port<1024|| m_basic_info.local_port >65535 ){m_basic_info.local_port = 8888;}if(m_basic_info.server_port<1024|| m_basic_info.server_port >65535 ){m_basic_info.server_port = 8888;}zlog_info(g_zlog,"APP run info:[server ip = %s,server port=%d, local port = %d]",m_basic_info.server_ip.c_str(),m_basic_info.server_port,m_basic_info.local_port);std::string posturi = "http://";posturi.append(m_basic_info.server_ip);posturi.append(":");	posturi.append(std::to_string(m_basic_info.server_port));	m_http_client = std::make_shared<httplib::Client>(posturi);//m_log = HANA<LOG>::GetHANA();m_thread_pool = std::make_shared<BlackBox>(MAX_THREADS,MAX_QUEUE_SIZE);m_thread_pool->init();//m_queue = std::make_shared<BlockQueue<LED_MSG>>(30);m_inner_queue = std::make_shared<BlockQueue<INNER_MSG>>(30);return true;	}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8226.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis详细

Redis简介 Redis的数据类型 Redis中的常用指令 通用指令 字符串操作指令 set num 1 get num setex num1 10 1 get num1 incr num incrby num 3 decr num decrby num 3哈希操作命令 列表&#xff08;List&#xff09;操作命令 rpoplpush source dest 将source中的末尾元素移除…

c#/c++ 通过系统api监视文件变化的问题

再分享个比较经典的案例&#xff0c;在很多场景下&#xff0c;我们都要去监视某个文件夹下的文件变化&#xff0c;在创建、修改或删除的时候触发一些行为。众所周知&#xff0c;c#有个实现类叫FileSystemWatcher&#xff0c;可以用来监视目录包括子目录下文件的变化&#xff0c…

Lion:闭源大语言模型的对抗性蒸馏

通过调整 70k 指令跟踪数据&#xff0c;Lion (7B) 可以实现 ChatGPT 95% 的能力&#xff01; 消息 我们目前正在致力于训练更大尺寸的版本&#xff08;如果可行的话&#xff0c;13B、33B 和 65B&#xff09;。感谢您的耐心等待。 **[2023年6月10日]**我们发布了微调过程中解…

83、基于STM32单片机录音机录音笔语音存储回放TF卡TFT屏系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

【Linux】Haproxy搭建Web群集

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Haproxy搭建Web群集 一、Haproxy概述1.常见的Web集群调度器2.Haproxy应用分析3.Haproxy常用调度算法4.Haproxy的主要特性5.LVS、Nginx、Haproxy的区别 二、Haproxy搭建Web群集…

数据结构与算法_堆排序

堆排序&#xff0c;即利用堆的思想来进行排序。要实现堆排序&#xff0c;首先要建堆&#xff0c;建堆又分为建大堆和建小堆&#xff1b;然后再一步一步地删除堆的元素来进行排序。 目录 一、堆排序的时间复杂度 二、建堆 向上调整 向下调整 三、堆排序 四、代码实现 向…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存&#xff0c;那么既然引入缓存&#xff0c;那就会有一个缓存与数据库数据一致性的问题。 首先&#xff0c;我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式&#xff0c;是最常见的Redis缓存模式&a…

react菜鸟教程学习笔记

目录 第一个react实例 react安装 对react机制最直观的理解 如果你第一次用npm 关于初始化package.json的问题 使用 create-react-app 快速构建 React 开发环境 项目目录结构 修改一下代码执行源头APP.js React元素渲染 将元素渲染到DOM中 更新元素渲染 关于vue的更新…

golang 结构体struct转map实践

1、反射 type sign struct { Name string json:"name,omitempty" Age int json:"age,omitempty" } var s sign s.Name "csdn" s.Age 18 //方式1 反射 var data make(map[string]interface{}) t : reflect.TypeOf(s) v : …

记录使用ffmpeg把mp4转换成m3u8

背景:公司需要上一些视频资源,平均每一个都在600m以上,经过考虑以后采取视频分片以后上传到oss上进行加速播放的流程.这里记录一下使用ffmpeg进行转换视频格式的过程中的一些命令. 准备工作: 下载ffmpeg到本地,以及配置ffmpeg到环境变量中,这里就不多说了. 使用的时候先打开…

【IMX6ULL驱动开发学习】14.Linux驱动开发 - GPIO中断(设备树 + GPIO子系统)

代码自取【14.key_tree_pinctrl_gpios_interrupt】&#xff1a; https://gitee.com/chenshao777/imx6-ull_-drivers 主要接口函数&#xff1a; 1. of_gpio_count&#xff08;获得GPIO的数量&#xff09; static inline int of_gpio_count(struct device_node *np)2. kzalloc…

用四元数表示旋转

旋转四元数以及如何使用它们 英文版参考链接:Quaternions 四元数&#xff0c;它是一种用四个实数表示复数的推广&#xff0c;可以用来高效地表示和计算三维空间中的旋转1。 旋转四元数的性质: All rotation quaternions must be unit quaternions.|q| 1For rotation quater…