首頁>Program>source

我需要匯出几个變數,以便它们在命令列中類似於以下內容

export ROS_HOSTNAME=xxx

如何在c ++中使用setenv()来實現這一目標?

谢谢。

最新回復
  • 12天前
    1 #

    来自 setenv() 手動輸入:

    SYNOPSIS

    #include <stdlib.h>  
    int setenv(const char *envname, const char *envval, int overwrite);
    

    DESCRIPTION
    setenv()函式應在呼叫過程的環境中更新或添加一个變數. envname引數指向包含環境變數名稱的字元串,以 被添加或更改.環境變數應設置為環境指向的值.如果envname指向包含" ="字元的字元串,則该函式將失败.如果 如果envname命名的環境變數已经存在並且overwrite的值不為零,則该函式將返迴成功並且環境將被更新.如果環境 以envname命名的變數已经存在並且覆盖值是零,该函式應返迴成功並且環境應保持不變。

    如果應用程式修改了環境或其指向的指標,則setenv()的行為未定義. setenv()函式應更新指向该環境的指標的列表 點。

    此功能複製envname和envval描述的字元串。

    setenv()函式無需重入.不需要重入的函式不需要是執行緒安全的。

    RETURN VALUE
    成功完成後,應归零.否則,將返迴-1,將errno設置為指示錯誤,並且環境將保持不變。

    所以您應该致電

    setenv("ROS_HOSTNAME","xxx",1); // does overwrite
    

    setenv("ROS_HOSTNAME","xxx",0); // does not overwrite
    

    適合您的情况.取決於是否要覆盖可能存在的定義。

    NOTE:

    您不能使用 setenv() 將變數从您的過程匯出到呼叫過程(shell)! 用fork建立的子程序將繼承当前的程序環境定義,因此也將繼承您的更改和添加。

  • 12天前
    2 #

    此處是setenv函式的簽名

    #include <stdlib.h>
    

    int setenv(const char * envname,const char * envval,int overwrite);

    鏈接:http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

    在您的情况下,您可以這樣稱呼它:

    setenv("ROS_HOSTNAME", "xxx", true);
    

    最後一个布林引數表示是否要覆盖環境變數的值(如果已经存在).

  • 12天前
    3 #

    Do like this

    setenv("ROS_HOSTNAME", "xxx", true);
    

    請註意,它也是簡介:

    #include <stdlib.h>
    int setenv(const char *envname, const char *envval, int overwrite);
    

    參见 this link 有關 setenv()的更多详细資訊

  • ios:如何使用Unicode十六进製值(UTF-16)在Swift中表示字元串
  • php:从会话儲存檔案中讀取会话資料