【问题标题】:How execle() system call works?execle() 系统调用如何工作?
【发布时间】:2015-02-23 09:48:51
【问题描述】:

我正在尝试理解这个系统调用 (execle()),但我不知道它是如何工作的。我不知道如何使用 char* envp[],我们必须将其作为参数传递。我已经尝试过了,但它不起作用:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    int pid;
    int* status;
    char* envp[] = {"/usr/lib", 0};
    //Child process
    if((pid=fork())==0)
    {
        printf("I'm the child and I'm going to list...\n");
        execle("/bin/ls", "ls", "-l", "-a", 0, envp);
        printf("Error\n");
    }
    //Parent process
    else
    {
        printf("I'm the parent...\n");
        wait(status);
    }
    printf("Child status: %d\n", *status);
}

我不知道应该在 char* envp[] 中放什么。

【问题讨论】:

  • envp 用于环境变量,它们是从父环境继承的,因此没有必要这样做。你真的想用它来改变环境吗?如果是这样,您要准确设置什么变量?
  • 我不知道应该在 envp 中放入什么才能正确运行程序。我放 /usr/lib 是因为我想列出该文件夹中的文件,但我认为我对 envp 变量没有正确的了解...
  • 阅读手册exec(3),然后阅读execve(2)。另请阅读Advanced Linux Programming
  • 好的。谢谢。但是在什么情况下这个系统调用(execle())而不是 execl() 有用呢?
  • 好吧,如果您希望新进程拥有这个确切的环境而不是父进程。这在创建新会话的安全敏感应用程序、登录管理器等中很有用。普通应用程序应该继承父环境,所以最好只使用execl() 或者execlp()。

标签: c operating-system system-calls


【解决方案1】:

但是在什么情况下这可能有用 系统调用 (execle()),而不是 execl()? ——维克多

好吧,如果您希望新进程拥有这个确切的环境而不是父进程。这在创建新会话的安全敏感应用程序、登录管理器等中很有用。普通应用程序应该继承父环境,所以最好只使用execl() 或者execlp()。 ——罗德里戈

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 2023-04-09
    • 2014-11-17
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2011-06-17
    相关资源
    最近更新 更多