使用system()执行命令时如何设置环境变量?

2023-11-27

我正在 Linux 上编写 C 程序,需要执行命令system(),并且在执行该命令时需要设置环境变量,但我不知道在使用时如何设置环境变量system().


如果要将与父进程不同的环境变量传递给子进程,可以使用以下组合getenv and setenv。比如说,你想通过一个不同的PATH致您的孩子:

#include <stdlib.h>
#include <string.h>

int main() {
    char *oldenv = strdup(getenv("PATH")); // Make a copy of your PATH
    setenv("PATH", "hello", 1); // Overwrite it

    system("echo $PATH"); // Outputs "hello"

    setenv("PATH", oldenv, 1); // Restore old PATH
    free(oldenv); // Don't forget to free!

    system("echo $PATH"); // Outputs your actual PATH
}

否则,如果您只是创建一个新的环境变量,则可以使用以下组合setenv and unsetenv, 像这样:

int main() {
    setenv("SOMEVAR", "hello", 1); // Create environment variable
    system("echo $SOMEVAR"); // Outputs "hello"
    unsetenv("SOMEVAR"); // Clear that variable (optional)
}

当然,不要忘记检查错误代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用system()执行命令时如何设置环境变量? 的相关文章

随机推荐

  • 如何停止Memo控件的自动滚动?

    在 Windows 7 中 备忘录控件 TMemo 插入文本后会自动滚动 Memo Lines Add Path 这是我不想要的 因为滚动是我自己完成的 如何停止自动滚动 通常 向备忘录控件添加文本会将备忘录滚动到插入文本的底部 为了防止这
  • Objective-C 接口、委托和协议

    因此 我试图了解 Objective C 接口 委托和协议 所以我有一个问题 委托是否必须位于单独的文件中 或者可以是类中定义的方法吗 协议类似于java接口吗 这就是我目前的理解方式 如果你使用这个协议 它基本上会让你实现方法 我仍然对接
  • 外键与辅助键

    我曾经认为外键和辅助键是同一个东西 谷歌搜索后 结果更加令人困惑 有些人认为它们是相同的 另一些人则说辅助键是一个不必是唯一的索引 并且允许比主键更快地访问数据 有人可以解释其中的区别吗 或者这确实是一个混合术语的情况 每个数据库类型可能有
  • Math.Round 与 String.Format

    我需要将双精度值四舍五入为 2 位数字 什么是更好的 String Format 0 0 00 123 4567 123 46 Math Round 123 4567 2 123 46 Math Round double digits 数字
  • 改善 Flexbox 生产线的平衡

    举例来说 假设我有一个弹性盒 其中每个元素都包含一个图像 在这种情况下 Flexbox 的目的是均匀分布它们 看起来很容易 我们来试试吧 flex width 350px display flex flex wrap wrap flex g
  • javascript:检测滚动结束

    我有一个div层与overflow set to scroll 当滚动到底部时div 我想运行一个函数 接受的答案从根本上来说是有缺陷的 现已被删除 正确答案是 function scrolled e if myDiv offsetHeig
  • 使用动态字段名称更新模型实例

    我想做的很简单 f Foobar objects get id 1 foo somefield bar somevalue f foo bar f save 这不起作用 因为它尝试更新 f 对象的 foo 字段 该字段当然不存在 我怎样才能
  • 创建 MySQL 触发器的 SQL 语法错误

    我尝试创建触发器 CREATE TRIGGER aster users2 after update ON aster users FOR EACH ROW BEGIN update event set flag 1 where id 1 E
  • 使用 Unity 解决命名依赖关系

    我有一个具有 2 个依赖项的服务 一个存储库和一个网关 短信 我需要解析该服务的 2 个不同版本 它们仅在传递给网关的参数之一上有所不同 代码简化如下 public interface IService string DoSomething
  • 将任意字符串映射到 RGB 值

    我有一大堆任意自然语言字符串 对于我的工具来分析它们 我需要将每个字符串转换为唯一的颜色值 RGB 或其他 我需要颜色对比来取决于字符串相似性 字符串与其他字符串越不同 它们各自的颜色应该越不同 如果我总是为同一字符串获得相同的颜色值 那就
  • LoadString 仅在我没有英文字符串表时才有效

    我希望能够以编程方式修改应用程序的语言 或者至少使用 控制面板 gt 区域和语言选项 gt 格式 中指定的语言 如果我添加一个英语字符串表 为其制作一个法语和德语副本 然后删除英语字符串表 我可以以编程方式在加载法语和德语字符串之间切换 如
  • JavaScript 中的大数字字符串

    当我执行以下操作时 alert 2053716830872415770228778006271971120334843128349550587141047275840274143041 toString 我得到 2 053716830872
  • Google App脚本从网站提取数据

    所以我正在写一个脚本来查看在 Google 信息页上完成审核并更新谷歌电子表格 我发现html中保存这个值的行是 span class A7a 103 span 我只需要知道 URL 和 html 代码就可以从页面中提取内容 Use var
  • 如何包含 MVC 部分控件中的 css 文件?

    我正在使用 ASP NET MVC 并且有一个需要包含特定 CSS 和 JS 文件的部分控件 有没有办法让父页面渲染script and link页面 head 部分中的标签 而不是仅仅在部分控件中内联渲染它们 为了澄清我想要包含文件的控件
  • 类型暗示返回 self 的类方法的返回值?

    正如问题所描述的 我想输入提示aself返回 类似 class A def foo self gt what goes here do something return self 我已经尝试过的事情 将其注释为A 添加from future
  • 如何更改内核 I/O 缓冲区大小

    我正在对 I O 密集型应用程序进行一些实验 并试图了解改变内核 I O 缓冲区大小 不同电梯算法等的影响 如何知道内核中 i o 缓冲区的当前大小 内核是否根据需要使用多个缓冲区 我怎样才能改变这个缓冲区的大小 是否有一个配置文件存储此信
  • Oracle 10g 中通过数据库链接的传输是否经过压缩?是否可以?

    我正在通过数据库链接将数据从一个基地传输到另一个基地 使用INSERT INTO SELECT 我想知道通过链接传输的数据是否经过压缩或者可以压缩以避免过多的网络使用 我的带宽非常少 我认为如果还没有完成的话会有所帮助 有一些重复数据删除但
  • 每行带有 ^M 的文本文件

    我刚刚从朋友那里得到了一个源代码文件 该文件是在 UNIX 中创建的 当我使用 NotePad 在 Windows 中打开它时 每一行都有一个额外的空行 带着疑惑 我下载了 Vim 并用它打开了该文件 然后我在每行末尾看到一堆 M 这是什么
  • TFS 2010:如何将工作项链接到变更集

    我想以编程方式将工作项链接到变更集 目前 我已经从我的 C 代码创建工作项并将它们保存到 TFS 代码如下 WorkItem item new WorkItem project WorkItemTypes CustomItem item F
  • 使用system()执行命令时如何设置环境变量?

    我正在 Linux 上编写 C 程序 需要执行命令system 并且在执行该命令时需要设置环境变量 但我不知道在使用时如何设置环境变量system 如果要将与父进程不同的环境变量传递给子进程 可以使用以下组合getenv and seten