From Haikel, 3 Months ago, written in C.
This paste is a reply to ex5.c from Haikel - view diff
Embed
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5. #include <errno.h>
  6. #include <sys/types.h>
  7.  
  8. pid_t create_process(void) {
  9.         pid_t pid;
  10.         do {
  11.                 pid = fork();
  12.         }while((pid == -1) && (errno == EAGAIN));
  13.         return pid;
  14. }
  15.  
  16. int main(int argc , char *argv[]) {
  17.  
  18.         pid_t pid , stat;
  19.         int status = 0;
  20.  
  21.  
  22.         for(int i = 1 ; i < argc ;i++) {
  23.                 if((pid = create_process()) == 0){
  24.                         //printf("Child %d : %d parent %d\n",i,getpid(),getppid());
  25.                         execlp("gcc","gcc","-c",argv[i],NULL);
  26.                         perror("execlp");
  27.                         exit(0);
  28.                 }
  29.         }
  30.  
  31.         while((stat = wait(&status)) > 0);
  32.  
  33.         for(int i = 1 ; i < argc ;i++) {
  34.                 if(WIFEXITED(status)) {
  35.                         printf("Child process terminated  %d: %d\n", i,WEXITSTATUS(status));
  36.                 }
  37.         }
  38.  
  39.         // test
  40.         char *str[] = {"f","one","two"};
  41.  
  42.         for(int i = 1 ; i < argc ;i++) {
  43.                 execlp("gcc","gcc",argv[i],"-o",str[i],NULL);
  44.                 perror("execlp");
  45.                 exit(0);
  46.         }
  47.  
  48.         return 0;
  49. }