1 / 21

Some Example C Programs

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.

carlow
Télécharger la présentation

Some Example C Programs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

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

  16. #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 ptr = 140 *ptr = ‘T’ 140 141 142 ............................

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

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

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

More Related