[英]Make a variable that is initialized by a function available to a function in multithreaded environment
[英]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.