Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 21st, 2012  |  syntax: None  |  size: 2.00 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6.  
  7. int main(void) {
  8.  
  9. char input[110];
  10. char *str1;
  11. char *array1[20];
  12. char *arr1, *arr2, *argv1[10],*argv2[10];
  13. int pid,j;
  14. int x = 1;
  15. int fds[2];
  16. system("clear");
  17.  
  18. do {
  19.  
  20.         printf("AE > ");
  21.         fgets(input, 110, stdin);
  22.  
  23.         if(strchr(input,'|') != NULL) {
  24.                 str1 = strtok(input, "|");
  25.  
  26.                 arr1 = str1;
  27.        
  28.                 printf("Array 1: %s\n",arr1);
  29.  
  30.                 // extract string from string sequence
  31.                 str1 = strtok(NULL, "|");
  32.                 arr2=str1;
  33.                 printf("array 2: %s\n", arr2);
  34.  
  35.                 x=0;
  36.                      
  37.                 str1 = strtok(arr1, " \n");
  38.  
  39.                 // loop until finishied
  40.                 while (str1!=NULL) {
  41.                 argv1[x]=str1;  x++;
  42.                         // extract string from string sequence
  43.                         str1 = strtok(NULL, " \n");
  44.                 }
  45.                 argv1[x] = NULL;
  46.  
  47.                 for(j=0;j<x;j++)
  48.                         printf("argv1[%d]=%s\n",j,argv1[j]);
  49.  
  50.  
  51.                 str1 = strtok(arr2, " \n");
  52.                 x=0;
  53.                 // loop until finishied
  54.                 while (str1!=NULL) {
  55.                         argv2[x]=str1;  x++;
  56.                         // extract string from string sequence
  57.                         str1 = strtok(NULL, " \n");
  58.                 }
  59.                 argv2[x] = NULL;
  60.  
  61.                 for(j=0;j<x;j++)
  62.                         printf("argv2[%d]=%s\n",j,argv2[j]);
  63.  
  64.  
  65.  
  66.                 pipe(fds);
  67.  
  68.                 if(fork()==0) {
  69.                         close(fds[0]);
  70.                         dup2(fds[1],STDOUT_FILENO);
  71.                         close(fds[1]);
  72.                         execvp(argv1[0], argv1);
  73.  
  74.  
  75.                 } else {
  76.                         if(fork()==0) {
  77.                                 close(fds[1]);
  78.                                 dup2(fds[0],STDIN_FILENO);
  79.                                 close(fds[0]);
  80.                                 execvp(argv2[0], argv2);
  81.                         } else {
  82.                         close(fds[0]);
  83.                         close(fds[1]);
  84.                         wait();
  85.                         wait();
  86.                         }
  87.                 }              
  88.         } else {
  89.                 char *token, *arr1, *arr2, *argv1[10], *argv2[10];
  90.                 int i, a, b, n;
  91.                 int fds[2];
  92.                
  93.                 i=0 , a=0, b=0;
  94.                 token = strtok(input," \n");
  95.                 argv1[a] = token; a++;
  96.                        
  97.                 while(token!=NULL) {
  98.                         token = strtok(NULL," \n");
  99.                         argv1[a] = token; a++;
  100.                 }
  101.                 for(n=0; n < a; n++)
  102.                         printf("argv1[%d] = %s\n", n, argv1[n]);
  103.                        
  104.                 pipe(fds);
  105.                                
  106.                 if(fork() == 0) {
  107.                         execvp(argv1[0],argv1);
  108.                         exit(0);
  109.                 } else {
  110.                         close(fds[1]);
  111.                         wait(NULL);
  112.                 }
  113.  
  114.         }
  115.        
  116.  
  117.  
  118.         } while (!feof(stdin));
  119.        
  120.  
  121.         return 0;
  122. }