William-H
William-H

Reputation: 73

Using execve() in c

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?

Upvotes: 7

Views: 33746

Answers (1)

Sandro
Sandro

Reputation: 2796

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 };

Upvotes: 3

Related Questions