谁能给讲一下execle设置环境变量的具体用途吗?

qingdujun
博客专家认证
2014-08-19 11:26:00
能给讲一下execle设置环境变量的具体用途吗?
比如:envp为我自己设置的环境变量:
execle("/bin/ls","ls",NULL,evnp);
这个函数执行完毕,为什么还是现实当前路径下的ls呢?
...全文
316 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2014-08-23
  • 打赏
  • 举报
回复
什么意思,这问题还没解决吗?楼主是不是理解错了,设置环境变量不一定是改变 PATH “也就是说,哪些地方用到execle的时候,必须改变最后一个环境变量,而不能用默认的。” 不是为了改变默认值,是根据自己的需要设置一些值,比如 #5 可以传递 USER=unknown
qingdujun 2014-08-22
  • 打赏
  • 举报
回复
顶起~~~
qingdujun 2014-08-20
  • 打赏
  • 举报
回复
再顶一下。
  • 打赏
  • 举报
回复
APUE8.10 int execle(const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */ );

#include "apue.h"
#include <sys/wait.h>

char    *env_init[] = { "USER=unknown", "PATH=/tmp", NULL };

int
main(void)
{
    pid_t   pid;

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {  /* specify pathname, specify environment */
        if (execle("/home/sar/bin/echoall", "echoall", "myarg1",
                "MY ARG2", (char *)0, env_init) < 0)
            err_sys("execle error");
    }

    if (waitpid(pid, NULL, 0) < 0)
        err_sys("wait error");

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {  /* specify filename, inherit environment */
        if (execlp("echoall", "echoall", "only 1 arg", (char *)0) < 0)
            err_sys("execlp error");
    }

    exit(0);
}



qingdujun 2014-08-19
  • 打赏
  • 举报
回复
引用 1 楼 micropentium6 的回复:
execle executes in a new process and that process then terminated, your main thread though, still stay at where it is. In other words, /bin/ls was executed in the new process created by execle
/bin/ls was executed in the new process created by execle 我还是不懂后面那个环境变量有什么用途,能给我详细说一下吗,最好有个例子啦。
  • 打赏
  • 举报
回复
execle executes in a new process and that process then terminated, your main thread though, still stay at where it is. In other words, /bin/ls was executed in the new process created by execle
zhxianbin 2014-08-19
  • 打赏
  • 举报
回复
我觉得就是 #5楼 说所的吧
qingdujun 2014-08-19
  • 打赏
  • 举报
回复
引用 4 楼 zhxianbin 的回复:
http://www.cnblogs.com/mickole/p/3187409.html
嗯,这个文章我看过了,讲的很详细。 将execle的用法和execl结合者讲了,也证明了确实改变了环境变量。 但是,他还是没说#5楼的问题诶。我发帖前已经看过这篇文章了,你能帮我简单的说明一下#1的情况是为什么吗?
qingdujun 2014-08-19
  • 打赏
  • 举报
回复
引用 3 楼 micropentium6 的回复:
APUE8.10 int execle(const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */ );

#include "apue.h"
#include <sys/wait.h>

char    *env_init[] = { "USER=unknown", "PATH=/tmp", NULL };

int
main(void)
{
    pid_t   pid;

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {  /* specify pathname, specify environment */
        if (execle("/home/sar/bin/echoall", "echoall", "myarg1",
                "MY ARG2", (char *)0, env_init) < 0)
            err_sys("execle error");
    }

    if (waitpid(pid, NULL, 0) < 0)
        err_sys("wait error");

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {  /* specify filename, inherit environment */
        if (execlp("echoall", "echoall", "only 1 arg", (char *)0) < 0)
            err_sys("execlp error");
    }

    exit(0);
}



你好,可能你没明白我的意思,我想问一下,execle最后那个环境变量引入有什么作用,而不是怎么去用execle这个函数。 也就是说,哪些地方用到execle的时候,必须改变最后一个环境变量,而不能用默认的。

742

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • Power Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧