From Haikel, 3 Months ago, written in C.
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.         for(int i = 1 ; i < argc ;i++) {
  40.                 execlp("gcc","gcc",argv[i],"-o",i,NULL);
  41.                 perror("execlp");
  42.                 exit(0);
  43.         }
  44.  
  45.         return 0;
  46. }

Replies to ex5.c rss

Title Name Language When
Re: ex5.c Haikel c 3 Months ago.
Re: ex5.c Haikel c 3 Months ago.