Advertisement
Guest User

argk

a guest
May 25th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. /*gcc uebung05.c -Wall -ansi -o uebung05.out*/
  2. #include <sys/types.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <fcntl.h>
  8. #include <sys/stat.h>
  9.  
  10. char* mystdin(){
  11.   int  strlen = 4;                            /*string lenght*/
  12.   char *str = malloc(strlen * sizeof(char));  /*input string*/
  13.   char c;                                     /*new char*/
  14.   int counter = 0;                            /*position neuer char*/
  15.   while((c = getchar()) != '\n'){             /*zeile einlesen*/
  16.     if(counter >= strlen)                     /*falls länge überschritten*/
  17.       str = realloc(str, (strlen += 4) * sizeof(char)); /* mache platz für 4 neue Zeichen*/
  18.     str[counter++] = c;                       /*füge neuen cahr hinzu*/
  19.   }
  20.   str = realloc(str, (counter++) * sizeof(char));
  21.   str[counter] = '\0';                      /*beende string*/
  22.   return str;
  23. }
  24.  
  25. int main(void)
  26. {
  27.   pid_t pid, wpid;
  28.   int status = 0;
  29.   int newSTDIN = 0;
  30.   int newSTDOUT = 0;
  31.   char* input = NULL;
  32.   char* output = NULL;
  33.   char* cmd;
  34.   char* params;
  35.   char* lcmd=mystdin();
  36.   char* temp=strchr(lcmd,'<');
  37.   if(temp!=NULL){
  38.       input=lcmd;
  39.       *(temp-1)='\0';
  40.       temp++;
  41.       cmd=temp;
  42.   }
  43.   else
  44.       cmd=lcmd;
  45.   output=strchr(cmd,'>');
  46.   if(output!=NULL){
  47.       *output='\0';
  48.       output++;
  49.   }
  50.   while(*output==' ')
  51.     *output++;
  52.   while(*cmd==' ')
  53.     *output++;
  54.   params=strchr(cmd,' ');
  55.   if(params!=NULL){
  56.       *params='\0';
  57.       params++;
  58.   }
  59.   printf("input:\"%s\"\n", input);
  60.   printf("output:\"%s\"\n", output);
  61.   printf("cmd:\"%s\"\n", cmd);
  62.   printf("params:\"%s\"\n", params);
  63.   if((pid=fork()) < 0)
  64.     perror("fork error");
  65.     else if(pid == 0) {
  66.       if(input != NULL){
  67.         newSTDIN = open(input, O_RDONLY);
  68.         dup2(newSTDIN, STDIN_FILENO);
  69.         close(newSTDIN);
  70.       }
  71.       if(output != NULL){
  72.         newSTDOUT = open(output, O_RDONLY);
  73.         dup2(newSTDOUT, STDIN_FILENO);
  74.         close(newSTDOUT);
  75.       }
  76.       return execlp(cmd,cmd,params,NULL);
  77.     }else {
  78.       wpid = wait(&status);
  79.       printf("Exit status of %d was %d (%s)\n", (int)wpid, status, (status == 0)? "OK" : "ERROR");
  80.       /*free?*/
  81.     }
  82.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement