如何在环境中使用execvp / execlp

时间:2013-11-18 22:25:06

标签: c exec

如何在execlp之前设置environ?

     #include <stdio.h>
    #include <unistd.h>
    #include <syslog.h>
//    Tried extern char **environ;

    int main (int argc, char *argv[]) 
    {
// Tried environ = -- gives compile error
        char** environ =
        {
            "foo=bar",
            "hello=world",
            0 // zero byte
        };

        //environ = ??
        execlp("env", "env", (char*)0);
    return 0;
    }

没有打印foo = bar THX。

1 个答案:

答案 0 :(得分:2)

man execlpman environ会有所帮助:

  

execle()和execvpe()函数允许调用者通过参数envp指定执行程序的环境。 envp参数是一个指向以null结尾的字符串的指针数组,必须由NULL指针终止。其他函数从调用过程中的外部变量environ获取新过程映像的环境。

environunistd.h中声明为extern,您需要在调用execlp()之前填充变量。另请注意,environ中的字符串应采用key=value;

格式
#include <stdio.h>
#include <unistd.h>

// declare environ as extern
extern char** environ;

int main (int argc, char *argv[])
{

    // populate environ
    environ[0] = "foo=bar";
    environ[1] = NULL;

    // call execlp
    execlp("/usr/bin/env", "", (char *)0);

    return 0;
}