日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程环境详解(四)---getenv、putenv和setenv函数详解

發布時間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程环境详解(四)---getenv、putenv和setenv函数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Linux中的c程序的典型內存分布中,之前提到的有 text段、data段、bss段、堆和棧這幾部分,在筆記“麥子學院c語言->典型c語言程序的c內存分布”中介紹了。但是其實一個c語言進程的內存分布中不止是有這些區域,還有命令行參數、環境變量以及共享庫和mmap映射區等區域。如下圖所示

------------------------------

環境變量區域

命令行參數

共享庫和mmap映射區

bss段

data段

text段

-------------------------------

=====================================================

通常環境變量是通過 name=value 的形式給出的,使用 environ 指針打印出的所有的環境變量的形式就是如此。使用 getenv 函數可以通過給出 name 來獲得 value 的值。

函數原型:

函數參數:

  • name:想要獲取的環境變量名

返回值:

  • 調用成功返回指向 value 的指針
  • 調用失敗返回 NULL

=====================================================

putenv 函數用來向環境表中 添加或者修改 環境變量。

函數原型:

函數參數:

  • string:指向環境變量的指針,其中環境變量必須以 "name=value" 的形式給出

返回值:

  • 調用成功返回 0
  • 調用失敗時返回 非0 值

如果環境表中沒有 name 這個環境變量,則添加該環境變量;如果環境表中已經有了name這個環境變量,則先刪除之前的 value,再修改為新的 value。

=====================================================

setenv 函數和putenv 函數功能類似,可以用來 添加或修改 環境變量。

函數原型:

函數參數:

  • name:環境變量名
  • value:環境變量值
  • overwrite:重寫選項,當 name 在環境表中存在時,如果 overwrite 的值為 0 ,則不修改name的值;如果 overwrite 的值為 非0,則修改name的值。

返回值:

  • 調用成功返回 0
  • 調用失敗時返回 非0

=====================================================

putenv 函數和 setenv 函數雖然功能類似,但是這兩個函數在實現方面還是有區別的,區別如下:

putenv函數:

  • putenv 函數會將參數 string 直接填寫到環境表中,不會再為 "name=value" 這個字符串再去分配內存。如果是在一個函數中定義的string,那么在調用該函數后,string 指向的內容可能會被釋放,就找不到name環境變量的值了。

setenv 函數:

  • setenv 函數和 putenv 函數不同,它會將name和value指向的內容復制一份并為其分配內存,形成 "name=value" 的字符串,并將其地址寫入到環境表中。所以就不會出現上面putenv 的情況,就算函數返回了,name 和 value指向的內容被釋放了,仍然有一份拷貝在。

總結

以上是生活随笔為你收集整理的进程环境详解(四)---getenv、putenv和setenv函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。