码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 程序设计:C语言 UNIX/LINUX 环境变量替换


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

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

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

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

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

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

            代码:

    1. string & GetShellOutput(char const * cmd, string & output)
    2. {
    3. char buf[1024];
    4. FILE * pf;
    5. output = "";
    6. //DEBUG_LOG << cmd << endi;
    7. if (NULL == (pf = popen(cmd, "r")))
    8. {
    9. thelog << "popen失败,无法执行环境变量替换 " << strerror(errno) << ende;
    10. return output;
    11. }
    12. while (NULL != fgets(buf, 1024, pf))
    13. {
    14. output += buf;
    15. }
    16. //DEBUG_LOG << output << endi;
    17. pclose(pf);
    18. return output;
    19. }
    20. string & ShellEnvReplace(string & str)
    21. {
    22. string cmd = "echo " + str;
    23. bool hasNewLine = (str.size() > 0 && '\n' == str[str.size() - 1]);
    24. GetShellOutput(cmd.c_str(), str);
    25. if (!hasNewLine)str.erase(str.size() - 1);
    26. return str;
    27. }

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

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

    (这里是结束)

  • 相关阅读:
    Go语言躲坑经验总结
    项目管理中,项目干系人的角色和责任
    【leetcode hot 100】对称二叉树,二叉树最大深度,买卖股票的最佳时机,只出现一次的数字,环形链表,相交链表
    第十章 时序与延迟
    单片机学习记录
    记一次 .NET某工控 宇宙射线 导致程序崩溃分析
    [4G/5G/6G专题基础-157]: 无线数据承载DRB与无线信令承载SRB
    kafka知识点
    【随想录】-【8 回溯算法】【组合问题】40 组合总和Ⅱ
    java核心技术---卷1 第四章 对象与类
  • 原文地址:https://blog.csdn.net/2301_77171572/article/details/134027775
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号