Download presentation
Presentation is loading. Please wait.
Published byAnastasia Hutchinson Modified over 9 years ago
1
Some Example C Programs
2
These programs show how to use the exec function.
3
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.
4
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.
5
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.
6
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”) ; } else printf(“Not a problem!\n”) ; Executed by parent }
7
int pid ; char *args[2] ; pid = fork() ;
8
int pid ; char *args[2] ; pid = ? fork Parent int pid ; char *args[2] ; pid = 0 Child
9
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 ….”);
10
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 ….”);
11
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 ….”);
12
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
13
These slides show how to parse input from the command line.
14
#include 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++ ; }
15
#include 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.
16
#include 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’
17
{ 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
18
These slides show how to use the fork() and exec() system calls.
19
Simple program to fork a new process #include 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") ; }
20
Simple program to start a new process executing #include 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) ; }
21
Simple program to show how children get out of control if not monitored by the parent. #include 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) ; }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.