【发布时间】: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