为什么使用setenv()后环境variables未被设置

为什么使用setenv()后环境variables未被设置,第1张

概述为什么使用setenv()后环境variables未被设置

我在linux中编写了一个C程序来使用setenv设置环境variables的值,但是在执行后,当我运行set或export ,环境variables本身似乎是未设置的。 为什么?

这里是代码片段:

int main() { char *mallocPtr,*callocPtr,*reallocPtr,*memalignPtr,*vallocPtr; struct sigaction sa; sa.sa_handler=SIGSEGV_handler; sigaction(SIGSEGV,&sa,NulL); if(setenv("ENV1","3",1) == 0) printf("ENV1 set to 3n"); else fprintf(stderr,"setenv Failed on ENV1");

更改在C ++(C)程序中定义的数字,而无需再次编译源代码

在linux中使用Visual Studio C#程序

QT qmake降低我的自定义小部件名称

QPalette不能在子QWidget上工作

将依赖关系Shell32.lib添加到WDK makefile

Mono跨平台正在发展吗?

链接在linuxpipe道使用pipe道()

系统托盘图标不显示在Qt5(linux / LXDE)

我怎样才能得到windows上的C + + char *格式当前窗口的标题?

windows服务状态C ++?

环境变量是在程序的上下文中设置的。

当你的程序退出时,你回到程序启动的上下文中。

C库将环境变量视为可以用getenv读取的全局设置,并使用setenv / putenv调整,并通过调用exec系列来继承,但这是一个方便的小说。 就内核而言,环境变量是main的第二组参数 。 如果你看一下exec系列的实际系统调用execve ,这就变得清晰了。 这是它的C原型:

int execve(const char *filename,char *const argv[],char *const envp[]); ^^^^^^^^^^^^^^^^^^

看到第三个参数? 这是进程A设置进程B的环境变量的唯一途径。 1因此,进程A可以设置进程B的环境变量的唯一时间是进程A通过fork和execve 启动进程B的时间。

你的程序是由 shell启动的,所以shell需要设置它的环境变量的副本,但是没有办法把变化推回到shell – 就像C函数没有办法改变其调用者的参数值。

1不要调出ptrace 。

其实每个进程都有自己的envp char数组。 main功能有以下签名:

int main(int argc,char *argv[],char *envp[])

通常,父类的父类继承父类父子层级。 这绝不是在父母子女等级中向上传达的。

总结

以上是内存溢出为你收集整理的为什么使用setenv()后环境variables未被设置全部内容,希望文章能够帮你解决为什么使用setenv()后环境variables未被设置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1292862.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存