Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
execle()系统调用是如何工作的?_C_Operating System_System Calls - Fatal编程技术网

execle()系统调用是如何工作的?

execle()系统调用是如何工作的?,c,operating-system,system-calls,C,Operating System,System Calls,我试图理解这个系统调用(execle()),但我不知道它是如何工作的。我不知道如何使用char*envp[],我们必须将其作为参数传递。我尝试过这个,但不起作用: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { int pid; int* status; char* envp[] = {"/usr/lib", 0}; //C

我试图理解这个系统调用(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);
}
#包括
#包括
#包括
内部主(空)
{
int-pid;
国际*地位;
char*envp[]={/usr/lib”,0};
//子进程
如果((pid=fork())==0)
{
printf(“我是孩子,我要列出…\n”);
execle(“/bin/ls”,“ls”,“-l”,“-a”,0,envp);
printf(“错误\n”);
}
//父进程
其他的
{
printf(“我是父母…\n”);
等待(状态);
}
printf(“子状态:%d\n”,*状态);
}

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

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


好的,如果您希望新流程具有这个确切的环境,而不是父环境。这对于创建新会话的安全敏感应用程序、登录管理器等非常有用。普通应用程序应该继承父环境,因此最好只使用
execl()
或者
execlp()

–rodrigo

envp
用于环境变量,它们是从父环境继承的,因此不需要这样做。你真的想用它来改变环境吗?如果是这样的话,你想准确地设置什么变量?我不知道我应该在envp中放入什么来正确运行程序。我之所以放置/usr/lib,是因为我想列出该文件夹中的文件,但我认为我对envp变量没有正确的认识…先阅读手册,然后再阅读。阅读也可以。谢谢但是,在什么情况下,这个系统调用(execle())而不是execl()会有用呢?嗯,如果您希望新进程拥有这个确切的环境,而不是父进程,那么。这对于创建新会话的安全敏感应用程序、登录管理器等非常有用。普通应用程序应该继承父环境,因此最好只使用
execl()
或者
execlp()