程序设计:C语言 UNIX/LINUX 环境变量替换

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


很多时候程序希望对配置参数做环境变量替换,这样自己省力用户也省力。

通过env去一个一个替换当然是个办法,但是很麻烦啊,而且也不知道执行效果和用户以为的是不是一样。

通过shell功能去做就比较简单了,而且效果和shell完全一致,用户不会迷惑。

办法也很简单,执行echo指令,然后获取输出即可。获取输出有几种办法:

  • 通过输出转向>输出到文件,不过这要使用一个临时文件,一个tmp目录的临时文件或自行计划的临时文件,文件操作存在并发冲突的可能
  • 用popen执行命令获取输出,只使用管道,不涉及文件,没有并发问题

代码:

cpp 复制代码
	string & GetShellOutput(char const * cmd, string & output)
	{
		char buf[1024];
		FILE * pf;

		output = "";
		//DEBUG_LOG << cmd << endi;
		if (NULL == (pf = popen(cmd, "r")))
		{
			thelog << "popen失败,无法执行环境变量替换 " << strerror(errno) << ende;
			return output;
		}
		while (NULL != fgets(buf, 1024, pf))
		{
			output += buf;
		}
		//DEBUG_LOG << output << endi;
		pclose(pf);
		return output;
	}
	string & ShellEnvReplace(string & str)
	{
		string cmd = "echo " + str;
		bool hasNewLine = (str.size() > 0 && '\n' == str[str.size() - 1]);
		GetShellOutput(cmd.c_str(), str);
		if (!hasNewLine)str.erase(str.size() - 1);
		return str;
	}

ShellEnvReplace执行环境变量替换,核心功能由GetShellOutput实现,自身额外处理了新行问题。这个方法获得的输出一定会包含一个换行符,如果输入字符串原来不是以换行符结束的就把输出的最后一个字符删掉。

GetShellOutput详细参见:程序设计:C语言 调用命令行程序并获得输出 popen(源码)-CSDN博客


(这里是结束)

相关推荐
爱莉希雅&&&1 小时前
Docker 部署 MySQL 双主双从同步架构详细笔记
linux·运维·数据库·mysql·docker·架构·主从同步
嵌入式学习和实践8 小时前
虚拟机 Ubuntu 磁盘扩容完全指南:从原理到实践,一步到位
linux·ubuntu·磁盘扩容
陳10308 小时前
Linux:进程间切换与调度
linux·运维·服务器
lcreek9 小时前
Linux 虚拟文件系统的建立与使用全过程解析
linux·虚拟文件系统·vfs
寒秋花开曾相惜9 小时前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
疏星浅月9 小时前
虚拟内存三大核心作用详解
linux·c语言·arm开发·嵌入式硬件
邂逅星河浪漫10 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
码农小钻风11 小时前
利用Samba实现局域网跨平台共享文件
linux·samba·共享
LN花开富贵11 小时前
【ROS】鱼香ROS2学习笔记二
linux·笔记·python·学习·嵌入式
无敌昊哥战神12 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode