Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/wait.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. char **parse_cmdline( const char *cmdlin );
  8.  
  9. int main(){
  10.  
  11. while(1){
  12.  
  13. write(1,"$ ",2);
  14. ssize_t size=0;
  15. char *input;
  16. getline(&input,&size,stdin);
  17. if(feof(stdin))break;
  18. char **array = parse_cmdline(input);
  19. free(input);
  20. //char *pointer = array[0];
  21. //if(pointer==NULL){continue;}
  22. pid_t pid = fork();
  23. if(pid < 0){
  24. perror("fork");
  25. free(array[0]);
  26. free(array);
  27. continue;
  28. }
  29. if(pid == 0){
  30. int p = execv(array[0],array);
  31. if(p < 0){
  32. perror(array[0]);
  33. free(array[0]);
  34. free(array);
  35. exit(0);
  36. }
  37. exit(0);
  38. }else{
  39. waitpid(pid, 0 ,0);
  40. }
  41. free(array[0]);
  42. free(array);
  43. }
  44. return 0;
  45. }
  46. char **parse_cmdline( const char *cmdlin ){
  47. int str_sym=0, last_sym=0, word=0, current_symbol, word_symbol;
  48. char *str = malloc(strlen(cmdlin) * sizeof(char));
  49. strcpy(str,cmdlin);
  50. char **new_str=malloc((word+1)*sizeof(char*));
  51.  
  52. for(;str_sym<strlen(str);str_sym++)
  53. {
  54. if(str[str_sym]==' ' || str[str_sym]=='\n')
  55. {
  56. if(last_sym!=0) last_sym++;
  57. new_str[word] = malloc((str_sym - last_sym)*sizeof(char));
  58. for(current_symbol=last_sym,word_symbol=0;current_symbol<str_sym;current_symbol++,word_symbol++)
  59. {
  60. new_str[word][word_symbol]=str[current_symbol];
  61. }
  62.  
  63. last_sym=str_sym;
  64. word++;
  65. new_str= realloc(new_str,(word+1)*sizeof(char*));
  66. }
  67. }
  68. return new_str;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement