some example c programs

21
Some Example C Programs

Upload: carlow

Post on 02-Feb-2016

24 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Some Example C Programs

Some Example C Programs

Page 2: Some Example C Programs

• These programs show how to use the exec function.

Page 3: Some Example C Programs

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.

Page 4: Some Example C Programs

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.

Page 5: Some Example C Programs

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.

Page 6: Some Example C Programs

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

}

Page 7: Some Example C Programs

int pid ;char *args[2] ;pid = fork() ;

Page 8: Some Example C Programs

int pid ;char *args[2] ;pid = ?

fork

Parent

int pid ; char *args[2] ;

pid = 0

Child

Page 9: Some Example C Programs

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 ….”);

Page 10: Some Example C Programs

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 ….”);

Page 11: Some Example C Programs

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 ….”);

Page 12: Some Example C Programs

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

Page 13: Some Example C Programs

• These slides show how to parse input from the command line.

Page 14: Some Example C Programs

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

Page 15: Some Example C Programs

#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.

Page 16: Some Example C Programs

#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’

Page 17: Some Example C Programs

{ 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

Page 18: Some Example C Programs

• These slides show how to use the fork() and exec() system calls.

Page 19: Some Example C Programs

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

Page 20: Some Example C Programs

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

Page 21: Some Example C Programs

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