Using execve() in c

23,361

here is the documentation on execve() function http://linux.die.net/man/2/execve

it says:

int execve(const char *filename, char *const argv[], char *const envp[]);

envp is an array of strings, conventionally of the form key=value, which are passed as environment to the new program.

but in your program env_args does not look like key=value

So probably you should define env_args by the following way:

char *env_args[] = {"PATH=/bin", (char*)0};

or just

char *env_args[] = { (char*)0 };
Share:
23,361
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I need to see a concrete example of how to specify the environment for execve() in a c program. In my class, we are writing a program that will utilize both standard LINUX executables and our own executables. Thus, the environment searching PATH will have to contain tokens for both types of executables. I cannot find a good example of how to specify the environment (third argument) for execve() as every article seems to suggest we use execvp() or *clp() or *cl(), etc., instead.

    In my project, we must use execve().

    Right now, I'm just trying to get execve() to work for a basic "ls" command so that I can get it to work later for any and all executables.

    Here is a snippet of my experiment code:

    else if(strcmp(tokens[0], "1") == 0) {
        char *args[] = {"ls", "-l", "-a", (char *)0};
        char *env_args[] = {"/bin", (char*)0};
        execve(args[0], args, env_args);
        printf("ERROR\n");
        }
    

    Each time command "1" is entered in my shell, I see my error message. I suspect this is because of the way I am declaring env_args[].

    Can someone show me a good example of how to implement execve() with a specified command searching environment?

  • Admin
    Admin about 9 years
    Thank You! This just about worked. I was having trouble understanding the difference between Paths and Environments. Got it up and running!