Some Example C Programs. These programs show how to use the exec function.
Post on 24-Dec-2015
214 Views
Preview:
Transcript
Some Example C Programs
• These programs show how to use the exec function.
exec Function calls
Used to begin a processes execution.
Accomplished by overwriting process imaged of caller with that of called.
Several flavors, use the one most suited to needs.
exec Function calls
int execv( char *path, char *argv[]) ;
path: directory path to executable image. Can be your program, or system program.
argv: Array of pointers to null terminated strings. These are the arguments to the program being executed.
exec Function calls
two conventions with argv:
1) argv[0] should hold the name of the program to be executed.
2) The last element must be NULL.
main (int argc, *argv[])
{ int pid ; char *args[2] ; pid = fork() ; if (pid ==0)
{ args[0] = “./a.out” ; All executed by args[1] = NULL ; child process i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ;}
elseprintf(“Not a problem!\n”) ; Executed by parent
}
int pid ;char *args[2] ;pid = fork() ;
int pid ;char *args[2] ;pid = ?
fork
Parent
int pid ; char *args[2] ;
pid = 0
Child
Child
int pid ;
char *args[2] ;
pid = fork()
if (pid == 0) {args[0] = “./a.out” ; args[1] = NULL ; i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ; }else printf(“Not ….”);
Parent
int pid ;
char *args[2] ;
pid = fork()
if (pid == 0) {args[0] = “./a.out” ; args[1] = NULL ; i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ; }else printf(“Not ….”);
Parent
int pid ;
char *args[2] ;
pid = fork()
if (pid == 0) {args[0] = “./a.out” ; args[1] = NULL ; i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ; }else printf(“Not ….”);
Child
int pid ;
char *args[2] ;
pid = fork()
if (pid == 0) {args[0] = “./a.out” ; args[1] = NULL ; i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ; }else printf(“Not ….”);
Parent
int pid ;
char *args[2] ;
pid = fork()
if (pid == 0) {args[0] = “./a.out” ; args[1] = NULL ; i = execv(“./aout”, args) ; printf(“OOOpppssss.\n”) ; }else printf(“Not ….”);
a.out
• These slides show how to parse input from the command line.
#include <unistd.h>#include <stdio.h>main()
{ char *ptr ; char input[1024] ; int i ;
while(1) { i = read(0, input, 512) ; //read from stdin ptr = input ; while (*ptr != '\n') { if (*ptr == ' ') printf("Space!\n") ; else printf("Read %c\n", *ptr) ; ptr++ ; } }}
#include <unistd.h>#include <stdio.h>main()
{ char *ptr ; char input[512] ; int i ;
while(1) { i = read(0, input, 512) ; //read from stdin ptr = input ; In C, the name of an array is the base address
of the array.
Now ptr points to the first element of array input.
#include <unistd.h>#include <stdio.h>main() { char *ptr ; char input[512] ; int i ; while(1) { i = read(0, input, 512) ; //read from stdin ptr = input ; while (*ptr != '\n')
ptr is the address of a character. *ptr dereferences the pointer to give the actual value at that address.
T h i s i s
140 141 142 ............................
ptr = 140
*ptr = ‘T’
{ if (*ptr == ' ') printf("Space!\n") ; else printf("Read %c\n", *ptr) ; ptr++ ; } printf statement prints string to terminal.
Uses control string and variables.
printf(“Read %c\n”, *ptr) ;
Other control characters are
%d: integer%s: string%l: long int%f: float/double
EXAMPLE
• These slides show how to use the fork() and exec() system calls.
Simple program to fork a new process
#include <stdio.h>main (int argc, char *argv[])
{ int pid ; char *args[2] ;
printf("Ready to FORK\n") ; pid = fork() ; if (pid ==0)
printf("I AM THE CHILD!!\n") ;
else printf("I AM THE PARENT!!!\n") ;}
Simple program to start a new process executing#include <stdio.h>main (int argc, char *argv[])
{ int pid ; char *args[2] ;
printf("Ready to FORK\n") ; pid = fork() ; if (pid ==0)
{ printf("I AM THE CHILD!!\n") ; args[0] = "./a.out" ; args[1] = NULL ; execv("./a.out", args) ; printf("OPPSSSS\n") ; }
else printf("I AM THE PARENT!!!\n") ; wait(NULL) ;}
Simple program to show how children get out of control if not monitored by the parent.
#include <stdio.h>main (int argc, char *argv[])
{ int pid ; char *args[2] ;
printf("Ready to FORK\n") ; pid = fork() ; if (pid ==0)
{ printf("I AM THE CHILD!!\n") ; args[0] = "./a.out" ; args[1] = NULL ; execv("./a.out", args) ; printf("OPPSSSS\n") ; }
else printf("I AM THE PARENT!!!\n") ; //wait(NULL) ;}
top related