[英]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.