Command Execution in C
Command execution in C is used to execute the system command using the C program. The system commands are executed by using the system() function which is a library function of stdlib.h header file.
By using the system() function, you can execute the Windows/Linux terminal commands inside a C program.
Syntax
The following is the syntax to execute system commands −
system(char*command);
Example of Command Execution
The following code shows the execution of ls command using system() function in C language.
#include <stdio.h>#include<stdlib.h>#include<string.h>intmain(){char cmd[10];strcpy(cmd,"dir C:\\users\\user\\*.c");system(cmd);return0;}
Output
Run the code and check its output −
C:\Users\user>dir *.c
Volume in drive C has no label.
Volume Serial Number is 7EE4-E492
Directory of C:\Users\user
04/01/2024 01:30 PM 104 add.c
04/02/2024 01:37 PM 159 add1.c
04/02/2024 01:37 PM 259 array.c
04/02/2024 01:37 PM 149 main.c
04/02/2024 01:37 PM 180 recursion.c
04/02/2024 01:37 PM 241 struct.c
04/02/2024 01:37 PM 172 voidptr.c
7 File(s) 1,264 bytes
0 Dir(s) 139,073,761,280 bytes
exec Family of Functions in C
The exec family of functions have been introduced in the “unistd.h” header file. These functions are used to execute a file, and they replace the current process image with a new process image once they are called.
The following are the functions of exec family in C −
- execl() Function
- execlp() Function
- execle() Function
- execv() Function
- execvp() Function
- execve() Function
1. execl() Function
The execl() function’s first argument is the executable file as its first argument. The next arguments will be available to the file when it’s executed. The last argument has to be NULL.
intexecl(constchar*pathname,constchar*arg,...,NULL)
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="/usr/bin/echo";char*arg1 ="Hello world!";execl(file, file, arg1,NULL);return0;}
The echo command in Linux is being invoked through the C code.
Output
Save, compile, and execute the above program −
$ gcc hello.c -o hello
$ ./hello
Hello world!
2. execlp() Function
The execlp() function is similar to the execl() function. It uses the PATH environment variable to locate the file. Hence, the path to the executable file needn’t be given.
intexeclp(constchar*file,constchar*arg,...,NULL)
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="echo";char*arg1 ="Hello world!";execlp(file, file, arg1,NULL);return0;}
Output
Here, echo is already located in the PATH environment variable. Save, compile and run from the terminal.
$ gcc hello.c -o hello
$ ./hello
Hello world!
3. execle() Function
In the execle() function, we can pass environment variables to the function, and it’ll use them. Its prototype is like this −
intexecle(constchar*pathname,constchar*arg,...,NULL,char*const envp[])
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="/usr/bin/bash";char*arg1 ="-c";char*arg2 ="echo $ENV1 $ENV2!";char*const env[]={"ENV1 = Hello","ENV2 = World",NULL};execle(file, file, arg1, arg2,NULL, env);return0;}
Output
Save, compile, and run from the terminal −
$ gcc hello.c -o hello
$ ./hello
Hello world!
4. execv() Function
The execv() function receives a vector of arguments that will be available to the executable file. In addition, the last element of the vector has to be NULL:
intexecv(constchar*pathname,char*const argv[])
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="/usr/bin/echo";char*const args[]={"/usr/bin/echo","Hello world!",NULL};execv(file, args);return0;}
Output
Save, compile, and execute the above program −
$ gcc hello.c -o hello
$ ./hello
Hello world!
5. execvp() Function
The execvp() has the following syntax −
intexecvp(constchar*file,char*const argv[])
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="echo";char*const args[]={"/usr/bin/echo","Hello world!",NULL};execvp(file, args);return0;}
Output
Save, compile, and execute the above program −
$ gcc hello.c -o hello
$ ./hello
Hello world!
6. execve() Function
In addition to environment variables, we can pass other arguments to execve() function as a NULL-terminated vector −
intexecve(constchar*pathname,char*const argv[],char*const envp[])
Example
Take a look at the following example −
#include <unistd.h>intmain(void){char*file ="/usr/bin/bash";char*const args[]={"/usr/bin/bash","-c","echo Hello $ENV!",NULL};char*const env[]={"ENV=World",NULL};execve(file, args, env);return0;}
Output
Save, compile, and execute the above program −
$ gcc hello.c -o hello
$ ./hello
Hello world!
Leave a Reply