Sie sind auf Seite 1von 21

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) ;
}
else
printf(Not a problem!\n) ; Executed by parent
}
int pid ;
char *args[2] ;
pid = fork() ;
Parent Child

int pid ; fork int pid ;


char *args[2] ; char *args[2] ;
pid = ? pid = 0
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 Child

int pid ; int pid ;


char *args[2] ; char *args[2] ;
pid = fork() pid = fork()
if (pid == 0) if (pid == 0)
{args[0] = ./a.out ; {args[0] = ./a.out ;

args[1] = NULL ; args[1] = NULL ;


i = execv(./aout, i = execv(./aout,
args) ; args) ;

printf(OOOpppssss.\n) ; printf(OOOpppssss.\n) ;
} }
else else
printf(Not .); printf(Not .);
Parent a.out

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

ptr = 140 T h i s i s

*ptr = T 140 141 142 ............................


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

Das könnte Ihnen auch gefallen