繁体   English   中英

在c函数中导出的环境变量是否在父shell中可用?

[英]whether the environment variable exported in c function will be available in parent shell?

我正在编写一个外壳程序,在该外壳程序上我调用ac函数,并在其中导出变量。 在下面的例子中

my_test.c
int main()
{
   setenv("MY_NAME","kk_rathor",1);
   // get and print MY_NAME works here 
}

my_test_Sh.sh  
#!bin/sh
test
echo $MY_NAME // does not works here 

我在打印$ MY_NAME时得不到我的名字,但是如果我在shell中导出任何内容,我可以在test.c上得到它。

从test.c导出的变量的作用域仅在该函数中。 如果不是,那我在做什么错?

谢谢,如果问题不清楚,请告诉我。

环境变量是当前进程的本地变量,并在创建时传播(=复制)到进程。 当您在C程序中设置MY_NAME ,仅在其过程中对其进行了设置,因此无法将其传播到父级(即shell)。

如果要向外壳提供一些数据,请在标准输出上写入。

阅读有关getenv(3)setenv(3)putenv(3)的信息

但是环境变量(实际上,整个虚拟地址空间和进程状态)对于它们的进程是本地的(例如,您的Shell),并且对其进行更改不会影响其他进程中的变量(除了通过fork(2)获得的未来子进程之外)。 因此,在子进程中更改环境变量-或任何其他内存位置, 工作目录文件描述符等...不会影响其父进程(或任何其他现有的进程)。 另请参见fork(2)execve(2)

你应该考虑其它类型的进程间通信 ,如管道(7) -s或插座(7) -S(也许shm_overview(7)sem_overview(7) )。 您可能希望在poll(2)之上有一些事件循环

阅读intro(2)syscalls(2)ALP之类的书。

顺便说一句,大多数现有的Unix shell免费软件 因此,您可以下载并研究其源代码。 您可以strace(1)他们。 另请参见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM